前面有看过设计模式的书和有关资料,但是还是很迷惑,用的少就没有深究,最近项目不那么紧张了,思考问题的时候,想到这个,就好好研究比较下吧。按照我自己的理解 ,做个记录,不然几天不用,就会慢慢淡忘了。
推荐这个这个作者的 关于设计模式的 讲解记录《JAVA与模式》,会借用他的相关资料做分析。
简单工厂模式 与 工厂模式 的区别:
1.简单工厂是一个具体实现的类,工厂模式会用一个抽象的类或者接口隔离。
2..新产品的增加,简单工厂的类要对应的修改,工厂模式,对扩展是开放的,对修改时关闭的。
工厂方法模式和简单工厂模式在结构上的不同很明显。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式退化后可以变得很像简单工厂模式。设想如果非常确定一个系统只需要一个具体工厂类,那么不妨把抽象工厂类合并到具体工厂类中去。由于只有一个具体工厂类,所以不妨将工厂方法改为静态方法,这时候就得到了简单工厂模式。
如果系统需要加入一个新的导出类型,那么所需要的就是向系统中加入一个这个导出类以及所对应的工厂类。没有必要修改客户端,也没有必要修改抽象工厂角色或者其他已有的具体工厂角色。对于增加新的导出类型而言,这个系统完全支持“开-闭原则”。
工厂模式 与 抽象工厂模式 的区别:
1.对“产品”的粒度与审视角度不一样。
工厂,针对一类的产品,同一个产品等级,更小粒度的产品,比如 CPU(intel 和AMD),抽象工厂,针对的是一个系列的产品,粒度更大,会组合多类的产品,形成一个系列,产品等级,比如intel系列电脑(含有 CPU这个类别 、还可以有 主板)。
2.职责变化。
工厂模式的职责单一,只负责生产一类产品,但是客户要做更多的组装与选择,在上游的灵活性更大,比如可以使用组装电脑,可以使用intel的cup,amd的主板(当然能不能正常运行使用,得另说)。
抽象工厂模式,职责多,要负责这个产品族下的所有产品,当产品族有新类别的产品添加时,抽象工厂必须被迫更改。但是对于添加一个产品族来说,就是扩展的。这样的好处是,简化了客户的职责(只需选择,而不用组合),把客户的职责延迟到了 抽象工厂中进行实现,可以限制简化客户的选择,避免过度的灵活性,这样就不会出现(intel的cpu,amd的主板)。同时对于产品族,系列的切换,也变得很简单。