상세 컨텐츠

본문 제목

[디자인패턴] 팩터리패턴

CS구멍/디자인패턴

by :Eundms 2024. 5. 5. 14:04

본문

단순 팩터리 패턴

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 분기 판단 논리가 있으며 유형에 따라 다른 객체를 동적으로 생성하는 경우

단일 객체 자체의 생성 프로세스가 복잡한 경우 

 

이럴 때 사용할 수 있다 

728x90

관련글 더보기

댓글 영역