之前对抽象工厂模式理解不透彻,困惑,看了李建忠的讲解,收获如下:
1、单纯从GoF的定义,并不能理解其用意;
2、要从动机去理解,这里有两点:
一系列相互依赖的对象的创建
由于需求的变化,存在更多系列对象的创建。
------------------------------------------------------------
李建忠总结要点如下:
1、如果没有应对“多系列对象构建”的需求变化,则没有必要用抽象工厂模式,这时候使用简单工厂完全可以了。
2、系列对象指的是这些对象之间有相互依赖或作用的关系。
3、abstract factory的缺点是难以应对“新对象”的创建,也就是在这一系列的对象确定下来之后,最好就不变了,只是增加不同系列的这些对象,这是其优势所在,如果增减了对象,对该模式反而是灾难。
------------------------------------------------------------
另外个人觉得其引入思路比较好:
首先是,没有变化,不需要额外封装;
如果有了变化,哪里有变化,就封装哪里;
这里抽象工厂模式应对的是对象创建有变化,那就封装对象创建。
为了实现不依赖于new,出现了工厂,让工厂统一创建对象;
为了实现对象实例不依赖于具体对象类,出现了抽象对象类,所有具体的对象类都继承于该抽象类。
同理,为了产生不同系列的对象,需要不同的工厂,那么就可以抽象一个抽象工厂,让所有具体工厂继承于抽象工长,如此一来,客户程序就只依赖于抽象类,并能应对变化了。
变化不会消失,只会转移,变化到哪去了呢?对抽象工厂的赋值,这里是逃不掉的。
------------------------------------------------------------
最后还是引出GoF的定义:
提供一个接口,让该接口负责创建一系列“相关或则相互依赖的对象”,而无需指定它们具体的类。
——《设计模式》GoF
以及其UML图
1、单纯从GoF的定义,并不能理解其用意;
2、要从动机去理解,这里有两点:
一系列相互依赖的对象的创建
由于需求的变化,存在更多系列对象的创建。
------------------------------------------------------------
李建忠总结要点如下:
1、如果没有应对“多系列对象构建”的需求变化,则没有必要用抽象工厂模式,这时候使用简单工厂完全可以了。
2、系列对象指的是这些对象之间有相互依赖或作用的关系。
3、abstract factory的缺点是难以应对“新对象”的创建,也就是在这一系列的对象确定下来之后,最好就不变了,只是增加不同系列的这些对象,这是其优势所在,如果增减了对象,对该模式反而是灾难。
------------------------------------------------------------
另外个人觉得其引入思路比较好:
首先是,没有变化,不需要额外封装;
如果有了变化,哪里有变化,就封装哪里;
这里抽象工厂模式应对的是对象创建有变化,那就封装对象创建。
为了实现不依赖于new,出现了工厂,让工厂统一创建对象;
为了实现对象实例不依赖于具体对象类,出现了抽象对象类,所有具体的对象类都继承于该抽象类。
同理,为了产生不同系列的对象,需要不同的工厂,那么就可以抽象一个抽象工厂,让所有具体工厂继承于抽象工长,如此一来,客户程序就只依赖于抽象类,并能应对变化了。
变化不会消失,只会转移,变化到哪去了呢?对抽象工厂的赋值,这里是逃不掉的。
------------------------------------------------------------
最后还是引出GoF的定义:
提供一个接口,让该接口负责创建一系列“相关或则相互依赖的对象”,而无需指定它们具体的类。
——《设计模式》GoF
以及其UML图
生活TMD需要激情,做事需冷静,说话需冷静!
遇事记着:办法总比困难多,困难和问题说不定就是机遇和转折!
历史证明:哪个环节没照顾到,哪个环节就会出问题!能自己来,就不要让别人来。