工厂模式原来这么简单

521 阅读3分钟

一、简单工厂模式

弟弟:简单工厂模式真的简单吗?

答:真的很简单,我们首先来举个栗子

举例子.jpg 某某康是个工厂,工厂里有个分区是关于手机的,分别是各种手机,见下图这里不多赘述,工厂和顾客协商来给生产手机

皇帝来了,说:“朕想要个"砖头"手机”。

某某康:识别到身份信息>>>“砖头”,然后工厂内部生产一个该种手机给皇帝。

大臣来了,说:“本官想要个"西瓜"手机”。

某某康:识别到身份信息>>>“西瓜”,然后工厂内部生产一个该种手机给大臣。

弟弟:简单工厂模式好像没什么卵用啊!

答:非也非也!这样做皇帝和大臣不用自己动手生产手机,而是从工厂中获得工厂生产的手机。也就是说使用者不必去制造手机,而是给工厂发布命令,获得手机,工厂内部生产手机,将生产者和使用者分离,实现解耦。毛主席说:“工作没有高低贵贱,只是分工不同”。我们通过分工来实现程序的各司其职。来来来,给你个图康康,无图无真相,no图noBB

简单工厂模式.jpg

弟弟:我想新增一种手机类型咋整?

答:这种模式用于生产同一类产品,如果要新增该类产品,不仅要新增新的手机生产线,还要在工厂中新增该产品的标识,是的客户可以知道有这种新的手机。弟弟,你说是不是很简单哇!

弟弟:...

二、工厂方法模式

弟弟:你知道OOP吗?

幸好昨天刚刚看过,一阵窃喜,答:oop啊,就是七大原则呗,

  1. 开闭原则:对外扩展放,对修改关闭
  2. 里氏替换原则:继承必须确保超类所用都得属性子类中任然成立
  3. 依赖倒置原则:面向接口编程,不要面向实现编程
  4. 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性
  5. 接口隔离原则:要为各类建立它们所需要的专用接口
  6. 迪米特法则:和你直接的朋友交谈,和朋友的的朋友不可交谈
  7. 合成复用原则:尽量优先使用组合或者聚合等关联关系来实现,其次此时继承关系实现。

弟弟:呵呵,我观你这七大原则,在简单工厂模式中用到了迪米特法则和依赖倒置原则。

答:你真是个小机灵鬼,如果想要更近一步还可实现开闭原则

弟弟:说来听听?

答:把简单工厂升级一下,首先建立一个工厂代表,然后围绕产品建立对应产品的实际工厂,这样皇帝想要一个砖头手机,那么只需要到砖头手机工厂拿到手机即可。

同样,大臣想要一个西瓜手机,也只需要到对应的工厂拿到手机。

如果,有个农民来了,想要一个石头手机,那么只要增加一个石头手机的模型,和配套生产工厂,就能从这个新的工厂中拿到手机。来来来,再给你个图康康,无图无真相,no图noBB。

工厂方法模式.jpg

弟弟:通过这种方式,满足了开闭原则,不用修改既有代码就可以完成新品的添加。以后就直接用这个了。

答:非也非也!你细品,每增加一种新产品就要增加一个工厂,代码复杂度,编程复杂度,结构复杂度,管理复杂度明显提高,所以工厂方法模式虽然更加符合设计原则,但是实际生产时,大多数情况下还是使用简单工厂模式。

弟弟:有点意思...

未完待续>>>升级版的抽象工厂模式

github