[디자인 패턴] 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라는 키워드가 쓰이지 않았지만 입력되는 문자열에 따라 알맞은 객체를 생성해준다