《Head.First设计模式》的学习笔记(6)--抽象工厂模式
?意图:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
结构:

实例:还是以Pizza店为例,现在pizza需要进行需要不同的原料,例如添加cheese,sauce等原料,重新扩展的pizza为:
?
?
?然后我们定义一个抽象工厂PizzaIngredientFactory:
?
最后我们来看这个纽约的pizza店,怎么用纽约的原料工厂创建出具有纽约风味的cheese的pizza:
?
?抽象工厂和工厂方法的一些联系:1.工厂方法潜伏在抽象工厂模式之下,例如上面我们说的createDough(),createSource()方法,这些其实都在被继承的时候,然后来实现实例化的。
2.抽象工厂和工厂方法都是创建对象,工厂方法是“继承”(把对象的创建委托给子类,子类实现工厂方法来创建对象),抽象工厂通过对象的组合(对象的创建被实现在工厂接口暴露出来的方法中),抽象工厂产品家族和想让制造的相关的产品集合起来,而工厂方法可以让实例通过子类进行决定。
3.提醒我们随时要针对接口编程,而不是对实现编程。
缺点:
如果要增加相应的产品,相应的继承子类也要进行修改。繁琐。
?
?