接上文。
披萨店改造的做法实际是“工厂方法”设计模式,原本由一个对象负责所有具体类的实例化,现在通过对PizzaStore做一些转变,变成由一群子类类负责实例化。
工厂方法用来处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中伏案与超类的代码就和子类对象创建代码解耦了。
代码里减少对于具体类的依赖是件好事。引入一个设计原则:
这个原则说明了,不能让高层组件依赖低层组件。而且,不管高层或低层组件,两者都应该依赖于抽象。
比如比萨店的椅子,PizzaStore是高层组件,而比萨实现是低层组件。很明显,PizzaStore天然依赖这些具体比萨类。
上面比萨店例子应用这个原则的过程是,在PizzaStore类中将实例化披萨对象的代码独立出来,建立一个工厂方法,这样高层组件(PizzaStore)和低层组件(比萨具体类)都依赖了Pizza抽象,遵循了依赖倒置原则。
依赖倒置,这里的倒置实际是倒置了我们思考的方式,原低层->高层的方式,即比萨->比萨店,倒置为高层->低层,即比萨店->比萨,并且都依赖接口。
确保原料的一致
现在,比萨店的成功关键在于新鲜、高质量的原料,但是有一些加盟店,使用低价原料来增加利润。那么,如何确保煤价加盟店使用高质量的原料呢?请看下篇《HeadFirst设计模式-工厂模式(4)-抽象工厂》。