Head First -- 简单工厂

简单工厂其实并不是一个设计模式,更多的像是一种编程习惯。

工厂处理创建对象的细节,一旦有了SimplePizzaFactory, orderPizza()就变成了客户。当需要pizza时,就叫披萨工厂做一个。
orderPizza()方法只关心从工厂得到一个披萨,而这个具体的披萨实现了Pizza接口,所以它可以调用Pizza的方法。

     类图:

Head First -- 简单工厂_第1张图片


主要示例代码:

public abstract class Pizza {
	void prepare(){
		System.out.println("prepare pizza");
	}
	void bake(){
		System.out.println("bake pizza");
	}
	void cut(){
		System.out.println("cut pizza");
	}
	void box(){
		System.out.println("box pizza");
	}
}

public class PizzaStore {
	SimplePizzaFactory factory;
	public PizzaStore(SimplePizzaFactory factory) {
		 this.factory = factory;
	}
	public Pizza orderPizza(String type){
		Pizza pizza = factory.createPizza(type);
		pizza.prepare();
		pizza.bake();
		pizza.cut();
		pizza.box();
		return pizza;
	}
}



public class SimplePizzaFactory {
	public Pizza createPizza(String type){
		Pizza pizza = null;
		if(type.equals("cheese")){
			pizza = new CheesePizza();
		}else if(type.equals("veggie")){
			pizza = new VeggiePizza();
		}
		else if(type.equals("clam")){
			pizza = new ClamPizza();
		}
		return pizza;
	}
	
}


public class SimplePizzaFactoryTest {
	public static void main(String[] args) {
		SimplePizzaFactory factory = new SimplePizzaFactory();
		PizzaStore pizzaStore = new PizzaStore(factory);
		pizzaStore.orderPizza("cheese");
	}
}




好处:
        根据开放闭合原则,对扩展开放,对修改关闭。虽然目前只有SimplePizzaFactory可以有很多个客户,虽然目前只有PizzaStore这么一个客户。
把创建披萨的代码封装进一个类,那么以后实现改变时只需修改这个类即可。


你可能感兴趣的:(工厂模式,工厂,简单工厂)