开头
我们可以将设计模式分为三大类,分别为创建型模式、结构型模式、行为型模式,每种模式有着各自的特点。
创建型模式——它是用来描述如何创建对象的。
思维导图:
创建型模型分类
创建型模式又分为简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式。
简单工厂模式
简单工厂模式提供了专门的工厂类用于创建对象,将对象的创建和使用分离开。
例子一:我们知道过年都需要做鞭炮,我父辈就是我爸爸那个年代的人们,小时后放炮自己买纸,买火药自己制作炮仗(流程很复杂),然后过年的时候放就可以了。可见他们小时后放炮分为两个步骤:1、制炮(创建对象) 2、放炮(使用对象)。 到了现在我们从烟花厂拿来鞭炮,然后放就可以了。烟花厂就好比工厂,我们不需要知道炮是如何制造出来的,只知道如何放就可以了。
例子二:我小时候喜欢吃月饼每年八月十五我们那里都要做月饼,小时后跟着家里人工厂做月饼,工厂里面的人说,你给我多少面,多少糖,多少油就可以了,然后就静静等着工厂给我们拿出来的月饼,整个过程我们就提供类一个原材料,然后吃就可以了,至于糖、油、面以怎样的比例组合,我们并不关心。
我们试想整个做月饼的过程来分析一下工厂的有缺点。
优点:工厂做月饼(创建对象)和佳兴吃月饼(使用对象)我们分离开了,我就知道吃,我想是什么种类的月饼,我就给你提供材料,然后等着吃就可以了。可见客户端的我什么都没有改变,只需要使用就可以。
缺点:我今天想吃花生味的、明天想吃草莓味的,后天又想吃奶油味的,随着我的需求增多,工厂需要创建制造不同种类的月饼和制作月饼的模具,导致工厂业务逻辑更加复杂,不利于整个工厂的维护。
优点:用户不用直接创建对象(制炮),只需要消费使用对象就可以了(放炮)。实现了将对象的创建和使用分离。
客户端不需要改动任何代码的情况下更换或者增加新的具体产品,提高了系统的灵活性。
缺点:如果工厂的业务过多,导致职责过重,业务逻辑复杂,不利于系统扩展和维护,使系统受到影响。
适用范围:工厂负责创建的对象少,业务简单。客户端只需要传入工厂类参数,不需要关心对象是如何创建的。
计算器简单工厂模式
代码图片:
客户端代码:
简单工厂类图:简单工厂类,依赖于运算类。
策略模式和简单工厂的类图大致一致,唯一不同的是Context和stratege之间是聚合关系。此时问题产生了,什么时候用聚合,什么时候用依赖。
我们去翻看一下大话设计模式中策略模式中的简单工厂,和简单工厂有什么不同。简单工厂中的工厂类,依赖于父类,而策略模式中的简单工厂,简单工厂类依赖于具体的子类。为什么要这样画呢????
简单工厂中创建的对象都是无参的对象。即用的是默认的构造参数。
策略模式中的简单工厂,需要根据策略的不同,产生的对象也就有所不同。所以工厂类需要依赖于具体的每一个子类。而不是这些子类的父类。
简单工厂最大的有点就是将对象的创建和是使用完全分离开来,可以也有它的缺点,一旦增加新的产品和功能就需要修改简单工厂的方法,(破坏了封装性)使得简单工厂的实现逻辑变得复杂,如何避免这个缺点呢?解决方法:下一篇的分享——工厂方法模式。