1、简单工厂
简单工厂,并非是设计模式,而是一种编程习惯,只是把产生对象的方法封装到一个工厂类里面去而已。
根据生产对象的参数值,生产不同的对象。像DateFormat也是使用简单工厂。
优势很明显,逻辑简单,缺陷也很明显,一个类负责了所有产品的创建。一旦出现更新。整个类维护的逻辑会相当复杂。
2、工厂方法
相对于简单工厂这种,抽象出了一个工厂抽象类,不是只有一个简单工厂类负责所有产品的创建,交由子类的创建。
3、抽象工厂
抽象工厂是一个类里面有多个工厂方法。
现在是在想,抽象工厂能直接用工厂方法替代吗?
最大的不同在于工厂方法一般只有一个工厂方法和重载的工厂方法,当不是一个普通简单的对象的时候,而如果是多个产品等级的话需要使用的是抽象工厂。
读不懂的东西,多读几次,自己动手画画图,敲敲改改代码,总能理解里面的含义。
工厂方法就只是一个方法,我们可以在子类里面重写。使用的是继承并且依赖于子类对期望的对象示例进行处理。
抽象工厂是一个对象,拥有多个工厂方法。
为什么HeadFirst介绍的时候,能让你看不懂两者的区别是因为,抽象工厂使用了依赖倒置。我们接下来如果把依赖倒置放到
工厂方法里面,还有把抽象工厂移除依赖倒置的使用,其实就很容易看出差差别在哪里了。
我现在想明白为什么我在看HeadFirst的过程中,很难区分出工厂方法和抽象工厂间的区别。
因为多了DI,依赖倒置的加入,新的东西的加入,会让你把重心放到了新的东西上面,而忘记了区分最原始的区分。
HeadFirst的书在后面也是一样,写到代理的时候,会加入RMI。
我对比着《设计模式之禅》 看,好的地方在于比喻多,有模式之间的比较,国人能写这样的书,其实模式是吃透了,其实还是不错的。
缺点就是有些地方没有深究进去。