Gof23种设计模式 —— 创建型模式总结和比较

2020年8月6日15:45:39 评论 59

创建型设计模式总结

设计模式 一句话归纳 目的 生活案例 框架源码举例
工厂模式 产品标准化,生成更高效 封装创建细节 实体工厂 LoggerFactory、BeanFactory
单例模式 Only one 保证独一无二 CEO Calender、Runtime
原型模式 多重影分身 高效创建对象 克隆 ArrayList、PrototypeBean
建造者模式 定制化配置 开放个性配置步骤 选配 StringBuilder、BeanDefinitionBuilder

创建型模式抽象类实例化的过程。帮助一个系统独立于如何创建、组合和表示它的那些对象。创建型模式都会将关于该系统使用哪些具体类的信息封装起来。

允许用结构和功能差别很大的‘产品’对象配置一个系统。配置可以是静态的,即在编译时指定,也可以是动态的,就是运行时在指定。

创建型模式隐藏了类的实例是如何被创建和放在一起的,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样就有了很大的灵活性。

Gof23种设计模式 —— 创建型模式总结和比较

 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点,避免创建多个实例的可能。

优点:让类自身负责保存它的唯一实例,这个类保证没有其他实例可以创建,并且还提供了一个访问该实例的方法。,这样就可以严格地控制客户访问它。

 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

优点:工厂方法要定义一个用于创建对象的接口,让子类决定实例化哪一个类。克服了简单工厂违背开放-封闭原则的缺点,有保持了封装对象创建过程的优点。运用工厂方法模式可以很好的让父类与子类解耦。

不足:由于工厂类集中了所有产品创建的逻辑,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

在抽象工厂模式中

1.改变一个应用的具体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置(开放封闭原则)

2.它让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端中

但是如果要增加类的话他需要修改三各类,是非常麻烦的,所以我们要用简单工厂改进抽象工厂

反射:反射的时候我们将字符串写成变量,可以通过变量去决定是哪个数据库,所以就去除了switch判断的麻烦,如果要增加数据库需要本着开放—封闭原则、依赖倒转、里氏转换

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

其中分为浅复制和深复制。

浅复制:克隆的对象对引用进行赋值,都是对同一个引用对象进行赋值,所以显示出来的结果也是一样的。

深复制:是将复制对象进行传值,也就是真正意义上的复制。

建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

构建一个子类,将父类所有的虚方法重写实现继承

在创建一个指挥者来控制建造的过程,隔离用户与建造过程的联系。用来创建复杂的对象。

类图中的聚合:不同的小人方法聚集到指挥者。Gof23种设计模式 —— 创建型模式总结和比较


参考链接

5种创建型模式:

Gof23种设计模式(1)——工厂模式(Factory Method)
Gof23种设计模式(2)——抽象工厂模式(Abstract Factory)
Gof23种设计模式(3)——建造模式(Builder)
Gof23种设计模式(4)——原型模式(Prototype)
Gof23种设计模式(5)——单例模式(Singleton)
Gof23种设计模式 —— 创建型模式总结和比较

回到总目录Gof23种设计模式(全解析)

参考链接:https://www.jianshu.com/p/672deb79d37b

https://blog.csdn.net/zjx828/article/details/88623500
素课网
  • 本文由 发表于 2020年8月6日15:45:39
  • 转载请注明:https://www.suketech.com/8800.html
设计模式:面向对象设计的六大原则 - 总结 设计模式

设计模式:面向对象设计的六大原则 – 总结

开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统。开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: