팩토리 매서드 패턴은 객체를 생성하는 공장을 만드는 것으로서 어떤 객체를 만드는 지는 자식 클래스에서 결정하게 하는 디자인 패턴이다.
override
해서 객체를 반환하게 하는 패턴이다.궁수 | 전사 | |
---|---|---|
시작 힘/민첩 | 100/100 | 100/100 |
레벨업 시 증가하는 힘/민첩 | 10/30 | 30/10 |
GOF | 설명 | our class |
---|---|---|
Creator | 추사클래스이며 구체클래스의 부모클래스로, Product 타입을 반환하는 팩토리매서드 (abstract method)를 가지고 있습니다. | CharacterCreator |
ConcreteCreator | 팩토리 매서드를 재정의하여 구체 클래스(ConcreteProduct)를 리턴합니다. | WarriorCreator ArcherCreator |
Product | 팩토리 매서드가 리턴하는 클래스의 추상클래스입니다. | Character |
ConcreteProduct | Product 클래스에 정의된 매서드가 구현된 구체 클래스입니다. | Warrior Archer |
Character.java
package Velog;
public abstract class Character {
protected int STR;
protected int DEX;
public abstract void levelUp();
public int getSTR() {
return STR;
}
public void setSTR(int STR) {
this.STR = STR;
}
public int getDEX() {
return DEX;
}
public void setDEX(int DEX) {
this.DEX = DEX;
}
}
Archer.java
package Velog;
public class Archer extends Character {
@Override
public void levelUp() {
this.STR += 10;
this.DEX += 30;
}
}
Warrior.java
package Velog;
public class Warrior extends Character {
@Override
public void levelUp() {
this.STR += 30;
this.DEX += 10;
}
}
CharacterCreator.java
package Velog;
public abstract class CharacterCreator {
public Character CharacterCreator() {
final Character character = character();
character.setDEX(100);
character.setSTR(100);
return character;
}
protected abstract Character character();
}
ArcherCreator.java
package Velog;
public class ArcherCreator extends CharacterCreator{
@Override
protected Character character() {
return new Archer();
}
}
warriorCreator.java
package Velog;
public class WarriorCreator extends CharacterCreator{
@Override
protected Character character() {
return new Warrior();
}
}
정말 도움이 많이 되었습니다 :)