์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋””์ž์ธํŒจํ„ด] ํŒฉํ„ฐ๋ฆฌํŒจํ„ด

CS/๋””์ž์ธํŒจํ„ด OOP

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 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

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ