抽象工厂模式(Abstract Factory Pattern):
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
原则:
依赖抽象,不要依赖具体类。
案例:
还是“工厂方法模式”中的例子,但是换一种方式来解决:
因为口味的不同是原材料的不同造成的,因此我们就创建原材料工厂,每个工厂生产的原材料都不相同,同一款Pizza从不同的原材料工厂拿货,做出的Pizza口味自然就不同了。
所以我们不用再根据城市和款式组合出各种Pizza类型(NYStyleCheesePizza、NYStyleClamPizza、ChicagoStyleCheesePizza和ChicagoStyleClamPizza),我们只需要根据款式建立Pizza类型(CheesePizza和ClamPizza),然后根据区域建立不同的原材料工厂(NYPizzaIngredientFactory和ChicagoPizzaIngredientFactory),将工厂和Pizaa类型绑定即可。
抽象工厂在这里表示:创建一个产品家族(Dough、Sauce、Cheese和Clam)的抽象类型(PizzaIngredientFactory),这个类型的子类(NYPizzaIngredientFactory和ChicagoPizzaIngredientFactory)定义了产品被产生的方法。
这样我们就可以针对(抽象类型的)接口编程而不是具体实现。
工厂方法和抽象工厂的区别:
工厂方法模式是在超类(PizzaStore)中定义一个工厂的抽象接口(create_pizza),然后由子类负责创建具体对象;
而抽象工厂则是维护一个产品家族,由子类定义产品被产生的方法,客户根据超类的接口开发。
本例中,工厂方法返回一个产品,抽象工厂则可获取一组产品的生产接口。
代码:
#!/usr/bin/python
class