게임몬스터등을 만들때 쓴다.
왜냐고? 이름등이 바뀌어야되고 각각의 속성을 지니고 있어야 되기 때문에 참조형으로 데리고 있으면 안된다.
따라서, 계속 클론을 해서 넘겨주면, 리젠하는 각각의 객체를 만들수 있다.
출처 : http://alleysark.tistory.com/entry/Design-pattern-Prototype
/* Prototype.java */
public interface Prototype {
public Prototype Clone();
}
/* Monster.java */
public class Monster implements Prototype {
private int minDamage;
private int maxDamage;
private String nameColor;
public Monster(){
}
public Monster(Monster monster){
minDamage = monster.minDamage;
maxDamage = monster.maxDamage;
nameColor = monster.nameColor;
}
public void setMinDamage(int minDamage){
this.minDamage = minDamage;
}
public void setMaxDamage(int maxDamage){
this.maxDamage = maxDamage;
}
public void setNameColor(String nameColor){
this.nameColor = nameColor;
}
@Override
public Prototype Clone() {
return new Monster(this);
}
}
/* MonsterRegenManager.java */
public class MonsterRegenManager {
private Monster normalMonPrototype;
private Monster magicMonPrototype;
public MonsterRegenManager(){
//default monster prototype
normalMonPrototype = new Monster();
normalMonPrototype.setMinDamage(0);
normalMonPrototype.setMaxDamage(100);
normalMonPrototype.setNameColor("white");
//magic monster prototype
magicMonPrototype = new Monster();
magicMonPrototype.setMinDamage(10);
magicMonPrototype.setMaxDamage(120);
magicMonPrototype.setNameColor("blue");
}
public Monster getMonster(String type){
if(type.equals("magic")){
return ((Monster)magicMonPrototype.Clone());
}
else if(type.equals("normal")){
return ((Monster)normalMonPrototype.Clone());
}
else{
return null;
}
}
}
'소프트웨어 개발 > Design Pattern' 카테고리의 다른 글
⑦ 디자인 패턴(Design Pattern) - Factory (0) | 2015.08.15 |
---|---|
⑧ 디자인 패턴(Design Pattern) - Observer (0) | 2015.08.12 |
대표적 디자인 패턴 목록 (0) | 2015.07.20 |
⑩ 디자인 패턴(Design Pattern) - Builder (2) | 2014.11.05 |
⑪ 디자인 패턴(Design Pattern) - Single Ton (0) | 2014.10.19 |