工厂模式
工厂模式的好处:
1.工厂模式是为了解耦:把对象的创建和使用的过程分开
2.工厂模式可以降低代码重复。如果创建对象B的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。我们可以这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的创建过程的修改维护。
3.工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误。
下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂
简单工厂模式(这并不是一种模式。像是一种编程模式)
简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类。
比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标。
优点:简单,好写。 缺点:需要新建新的对象时,需要更改工厂代码,继承实现,扩展性差。
工厂方法模式
工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。
戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。
生产哪种鼠标不再由参数决定,而是创建鼠标工厂时,由戴尔鼠标工厂创建。
后续直接调用鼠标工厂.生产鼠标()即可
优点:通过建立一个抽象工厂父类来让各种对象的工厂继承并实现,让每个对象工厂都具有个性化和标准化,并且当要加入新的对象类型时,只需要实现父类接口新建一个实现类工厂就行(对扩展开放,对修改关闭)
缺点:当有很多不同类型的对象时,会有大量的工厂类
抽象工厂模式
抽象工厂模式是用来生产一个产品组的,它有各个产品的接口,每个产品品牌实现这个产品接口,还有品牌公司的实现这就是工厂,通过这个工厂产生产品族。
抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
也就是PC厂商是个父类,有生产鼠标,生产键盘两个接口。
戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
创建工厂时,由戴尔工厂创建。
后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。
注意,抽象工厂模式主要用于生产产品族,包括鼠标、键盘这些,工厂方法模式是生成一个实体类,像电脑这样的东西,然后电脑里封装了鼠标、键盘等、
优点:把一群相关的产品集合起来,只需要用一个工厂实现
缺点:当需要新加入产品是必须修改接口
在抽象工厂模式中,假设我们需要增加一个工厂
假设我们增加华硕工厂,则我们需要增加华硕工厂,和戴尔工厂一样,继承PC厂商。
之后创建华硕鼠标,继承鼠标类。创建华硕键盘,继承键盘类。
即可。
在抽象工厂模式中,假设我们需要增加一个产品
假设我们增加耳麦这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。
以上。
借鉴:http://ichennan.com/2016/08/09/DesignPattern.html
https://blog.csdn.net/u014452224/article/details/54585129