一、简单工厂模式
弟弟:简单工厂模式真的简单吗?
答:真的很简单,我们首先来举个栗子
某某康是个工厂,工厂里有个分区是关于手机的,分别是各种手机,见下图这里不多赘述,工厂和顾客协商来给生产手机
皇帝来了,说:“朕想要个"砖头"手机”。
某某康:识别到身份信息>>>“砖头”,然后工厂内部生产一个该种手机给皇帝。
大臣来了,说:“本官想要个"西瓜"手机”。
某某康:识别到身份信息>>>“西瓜”,然后工厂内部生产一个该种手机给大臣。
弟弟:简单工厂模式好像没什么卵用啊!
答:非也非也!这样做皇帝和大臣不用自己动手生产手机,而是从工厂中获得工厂生产的手机。也就是说使用者不必去制造手机,而是给工厂发布命令,获得手机,工厂内部生产手机,将生产者和使用者分离,实现解耦。有人说:“工作没有高低贵贱,只是分工不同”。我们通过分工来实现程序的各司其职。来来来,给你个图康康,无图无真相,no图noBB
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
弟弟:我想新增一种手机类型咋整?
答:这种模式用于生产同一类产品,如果要新增该类产品,不仅要新增新的手机生产线,还要在工厂中新增该产品的标识,是的客户可以知道有这种新的手机。弟弟,你说是不是很简单哇!
弟弟:…
二、工厂方法模式
弟弟:你知道OOP吗?
幸好昨天刚刚看过,一阵窃喜,答:oop啊,就是七大原则呗,
- 开闭原则:对外扩展放,对修改关闭
- 里氏替换原则:继承必须确保超类所用都得属性子类中任然成立
- 依赖倒置原则:面向接口编程,不要面向实现编程
- 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性
- 接口隔离原则:要为各类建立它们所需要的专用接口
- 迪米特法则:和你直接的朋友交谈,和朋友的的朋友不可交谈
- 合成复用原则:尽量优先使用组合或者聚合等关联关系来实现,其次此时继承关系实现。
弟弟:呵呵,我观你这七大原则,在简单工厂模式中用到了迪米特法则和依赖倒置原则。
答:你真是个小机灵鬼,如果想要更近一步还可实现开闭原则
弟弟:说来听听?
答:把简单工厂升级一下,首先建立一个工厂代表,然后围绕产品建立对应产品的实际工厂,这样皇帝想要一个砖头手机,那么只需要到砖头手机工厂拿到手机即可。
同样,大臣想要一个西瓜手机,也只需要到对应的工厂拿到手机。
如果,有个农民来了,想要一个石头手机,那么只要增加一个石头手机的模型,和配套生产工厂,就能从这个新的工厂中拿到手机。来来来,再给你个图康康,无图无真相,no图noBB。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
弟弟:通过这种方式,满足了开闭原则,不用修改既有代码就可以完成新品的添加。以后就直接用这个了。
答:非也非也!你细品,每增加一种新产品就要增加一个工厂,代码复杂度,编程复杂度,结构复杂度,管理复杂度明显提高,所以工厂方法模式虽然更加符合设计原则,但是实际生产时,大多数情况下还是使用简单工厂模式。
弟弟:有点意思…