Head First -- 工厂方法

定义:
    工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。



Head First -- 工厂方法_第1张图片


主要示例代码:

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


public abstract class Pizza {
	String name;
	String dough;
	String sauce;
	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 NYStylePizzaStore extends PizzaStore{

	public Pizza createPizza(String type) {
		Pizza pizza = null;
		if(type.equals("cheese")){
			pizza = new NYStyleCheesePizza();
		}else if(type.equals("veggie")){
			pizza = new NYStyleVeggiePizza();
		}
		else if(type.equals("clam")){
			pizza = new NYStyleClamPizza();
		}
		return pizza;
	}



优点:
    它能够帮助我们将产品的"实现"从"使用"中解耦。如果增加产品或者改变产品的实现,Creator并不会受到影响(因为Creator与任何具体产品之间都不是紧耦合)。
    将创建对象的代码集中在一个对象或者方法中,可以避免代码中的重复,并且方便日后的维护。这也意味着客户在实例化对象时,只会依赖于接口,而不是具体的实现类。这可以帮助我们针对接口编程,而不是针对实现。这让代码更具有弹性,更好的应对未来的扩展。

你可能感兴趣的:(工厂模式,工厂方法)