[디자인 패턴] Factory Method 패턴
이멀젼씨
·2020. 1. 20. 12:50
- 정의
상황에 따라 어떤 객체를 생성할지를 결정하도록 하는 패턴이다
- UML
1. Item인터페이스를 정의한 후 아이템을 사용했을때 나오는 결과를 표현하기 위해 use메소드를 정의한다
2. TradeItem, EatItem, EquipItem은 Item인터페이스를 상속받아 use함수를 재정의한다
3. ItemUseFactory인터페이스를 정의한다
4. ItemUseFactoryImpl클래스를 정의하여 ItemUseFactory를 상속받고 Item형을 반환하는 메소드를 정의한다
- 코드
Item interface
public interface Item {
void use();
}
EatItem class
public class EatItem implements Item{
@Override
public void use() {
System.out.println("아이템을 먹었습니다");
}
}
EquipItem class
public class EquipItem implements Item{
@Override
public void use() {
System.out.println("아이템을 장착했습니다");
}
}
TradeItem class
public class TradeItem implements Item{
@Override
public void use() {
System.out.println("아이템을 교환했습니다");
}
}
ItemUseFactoryinterface
public interface ItemUseFactory {
Item useItem(String item);
}
ItemUseFactoryImpl class
public class ItemUseFactoryImpl implements ItemUseFactory{
@Override
public Item useItem(String item) {
switch(item) {
case "EatItem": return new EatItem();
case "EquipItem": return new EquipItem();
case "TradeItem": return new TradeItem();
default: return null;
}
}
}
Main class
public class Main {
public static void main(String[] args) {
ItemUseFactory itemUseFactory = new ItemUseFactoryImpl();
Item item;
item = itemUseFactory.useItem("EatItem");
item.use(); // 아이템을 먹었습니다
item = itemUseFactory.useItem("EquipItem");
item.use(); // 아이템을 장착했습니다
item = itemUseFactory.useItem("TradeItem");
item.use(); // 아이템을 교환했습니다
}
}
- 설명
ItemUseFactory는 객체를 생성하는 공장이라고 보면 된다
Main함수 안에서 new라는 키워드가 쓰이지 않았지만 입력되는 문자열에 따라 알맞은 객체를 생성해준다
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] ProtoType 패턴 (0) | 2020.02.11 |
---|---|
[디자인 패턴] Singleton 패턴 (0) | 2020.02.10 |
[디자인 패턴] Template Method 패턴 (0) | 2020.01.19 |
[디자인 패턴] Adapter 패턴 (0) | 2020.01.15 |
[디자인 패턴] Strategy 패턴 (0) | 2020.01.14 |