背景:
在工厂方法中,PizzaStore类依赖于所有的具体实现(所有继承它的类,需要依靠它完成实例化),故每增加一个Pizza种类,就等于让PizzaStore多了一个依赖。如果具体类改变了,就必须修改抽象类(PizzaStore),所以我们需要去减少对于具体类的依赖。
设计:
依赖倒置原则:要依赖抽象,不要依赖具体类。
实现一:PizzaStore类的强依赖主要因为它依赖每个Pizza类型,它在自己的orderPizza()方法中实例化这些具体类型。我们只需在orderPizza()中将实例化对象的代码独立出来即可。故创建一个Pizza抽象类,PizzaStore依赖这个抽象类,具体Pizza类也依赖于这个抽象类。
优点:高层组件和低层组件都依赖于Pizza对象,想要遵循依赖倒置原则,工厂方法并非是唯一的几千,却是最有威力的技巧之一。
有点像“针对接口编程,不针对实现编程”。这个原则说明了:不能让高层组件依赖低层组件,而且不管高层或低层组件,两者都应该依赖与抽象。(高层组件是由其他低层组件定义为行为的类,本例中,PizzaStore是高层组件,因为它的行为是由具体Pizza类定义的:PizzaStore创建所有不同的具体Pizza类对象,准备、烘培、切片、装盒,而具体Pizza类本身属于低层组件。)
遵循一下指导方针可以帮你避免在OO设计在违反依赖倒置原则&#