객체지향 방 굽기 느슨한 결합을 이용하여 객체지향 디자인을 만들게 된다.

수많은 if else문을 통하여 객체를 생성하게 된다. 만약 내용이 추가되거나 삭제되면 원본 클래스를 수정하므로
서브클래스 팩토리 클래스를 만들어 그쪽에서만 관리하게 만들어 준다. 

SimplePizzaFactory

public class SimplePizzaFactory {
	
	public Pizza createPizza(String type){
		Pizza pizza = null;

		if(type.equals("cheese")){
			pizza = new CheesePizza();
		}else if(type.equals("clam")){
			pizza = new ClamPizza();
		}

		return pizza;
	}
}

PizzaStore
public class PizzaStore {

	SimplePizzaFactory factory;

	public PizzaStore(SimplePizzaFactory factory){
		this.factory = factory;
	}

	public Pizza orderPizza(String type){
		Pizza pizza;

		pizza = createPizza(type);

		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();

		return pizza;
	}
}
PizzaStore에서 SimplePizzaFactory를 통해서 만들도록 세부화 한 것이다. PizzaStore에 원래 포함되어도 되는 코드이지만
수정삭제할 경우 SimplePizzaFactory만 수정하면 되기 때문이다. SimplePizzaFactory는 Pizza 추상클래스에 의존하고 있다.
 



팩토리 메서드 패턴 - 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴를 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에서 맡기는 것이다.



객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다.


헤드퍼스트에 나온 데코리이터 설명이다.
CondimentDecorator에서 Beverage클래스를 확장하고 있다. 데코레이터 형식이 그 데코레이터로 감싸는 객체의 형식이다.

+ Recent posts