文章参考来源:https://www.cnblogs.com/qiaoconglovelife/p/5750290.html
感谢:CoderCong
认知尚浅,如有错误,愿闻其详!
对三个工厂的认知
从模式简单工厂、工厂方法、抽象工厂,看出它们关键词在于工厂,本质就是使用工厂去生产产品。在学习前两个时,可以分出存在的区别,后来到工厂方法和抽象工厂,发觉它们就是一样的。发觉不出它们的区别,他们的区别就是工厂方法时只有一个接口方法,而抽象工厂则是存在多个接口方法。后来查阅资料弄明白,归根结底本质上工厂方法是抽象工厂的一种极端情况(即只生产一种产品)。它们三个的关系在于简单工厂在于解决对类的创建进行封装,但是存在工厂方法逻辑复杂的问题,而工厂方法是为了解决他存在的问题,但是存在着处理产品族问题比较复杂的问题,而抽象工厂则是针对产品族问题而来的。
区别
简单工厂 : 用来生产同一等级结构中的任意产品。(拓展增加产品都会造成工厂方法的逻辑复杂,难以维护)
工厂方法 :用来生产同一等级结构中的固定产品。(很容易去拓展产品,但是每个产品都会有个独立的工厂类)
抽象工厂 :用来生产不同产品族的全部产品。(拓展需要更改接口类,从而造成所有继承接口的类方法错误,所以不支持拓展,但是增加产品族确实很容易)
注意事项
(1)创建工厂类常常采用单例模式(Singleton)。
(2)工厂类拥有基类(定义共同接口),基类可以为纯虚类,也可以定义缺省方法。
(3)对于工厂方法和抽象工厂,基类中的生产产品的函数常常为虚函数,以实现动态绑定。
(4)调用工厂方法的函数通常采用工厂实现的指针和引用作为形参,以便根据不同的工厂实参调用不同的工厂方法。
具体三个工厂方法具体参照上三篇文章
网友评论