소프트웨어 개발/Design Pattern

⑨ 디자인 패턴(Design Pattern) - Prototype

늘근이 2014. 11. 9. 18:41

게임몬스터등을 만들때 쓴다.

왜냐고? 이름등이 바뀌어야되고 각각의 속성을 지니고 있어야 되기 때문에 참조형으로 데리고 있으면 안된다.

따라서, 계속 클론을 해서 넘겨주면, 리젠하는 각각의 객체를 만들수 있다.



출처 : 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;
}
}
}