public class ItemFactory {
public static ItemInterface createItem(String barcode) {
ItemInterface item = null;
if (barcode.equals("food")) {
item = new FoodItem();
} else if (barcode.equals("bicycle")) {
item = new BicycleItem();
}
return item;
}
}
if 분기 판단 논리를 다형성을 사용함으로써 제거한 코드
public class ItemFactory {
ItemInterface createItem();
}
public class FoodItemFactory implements ItemFactory {
@Override
public ItemInterface createItem() {
return new FoodItem();
}
}
public class BicycleItemFactory implements ItemFactory {
@Override
public ItemInterface createItem() {
return new BicycleItem();
}
}
public class ItemConfigSource {
public ItemConfig load (String item) {
ItemFactory itemFactory = null;
if(item.equals("food") {
itemFactory = new FoodItemFactory();
} else if (item.equals("bicylce") {
itemFactory = new BicycleItemFactory();
}
return itemFactory;
}
}
팩터리 클래스 객체를 생성하는 부분은 여전히 if문이 계속 써져 있다
팩터리의 팩터리를 만들어서 해결한다..
public class ItemConfigFactoryMap {
private static final Map<String, ItemInterfaceConfigFactory> cachedFactories = new HashMap<>();
static {
cachedFactories.put("food", new FoodItemFactory());
cachedFactories.put("bicycle", new BicycleItemFactory());
}
public static ItemInterfaceConfigFactory getItemFactory(String type) {
if(type == null || type.isEmpty()) {
return null;
}
ItemInterfaceConfigFactory factory = cachedFactories.get(type.toLowerCase());
return factory;
}
}
팩터리 패턴은 객체 생성 프로세스를 캡슐화하고, 객체 생성과 사용을 분리하여 코드의 복잡성을 줄일 수 있다
if 분기 판단 논리가 있으며 유형에 따라 다른 객체를 동적으로 생성하는 경우
단일 객체 자체의 생성 프로세스가 복잡한 경우
이럴 때 사용할 수 있다
[디자인패턴] 싱글턴 패턴 (0) | 2024.05.01 |
---|---|
[디자인패턴의 아름다움] 3장. 설계 원칙 : 단일책임원칙, 개방폐쇄 원칙 (0) | 2024.04.20 |
댓글 영역