设计模式之 5 大创建型模式,万字长文深剖 ,近 30 张图解!

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 设计模式是写出优秀程序的保障,是让面向对象保持结构良好的秘诀,与架构能力与阅读源码的能力息息相关,本文深剖设计模式之 5 大创建型模式。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。

关注△mikechen的互联网架构△,10年+BAT架构经验倾囊相授

大家好,我是 mikechen | 陈睿

设计模式是写出优秀程序的保障,是让面向对象保持结构良好的秘诀,与架构能力与阅读源码的能力息息相关。

可以说,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

前面,我们介绍了: 7 大设计原则(41张图解、2万多字)

今天我们详解设计模式的 5 种创建型模式

image.png

本文是《深入浅出设计模式》的第 13 篇,且已同步更新至我原创的《深入浅出设计模式》PDF 合集。

image.png

01 创建型模式的概述

设计模式有 23 种,划分为三类:创建型模式、结构型模式、行为型模式。
image.png

处理对象创建的模式,我们称为创建型模式

创建型模式的共同点是:

  • 将系统使用的具体类封装起来;
  • 隐藏具体类的实例创建和组合方式。

创建型模式分为对象创建型、类创建型。

  • 对象创建型:把类的创建推迟到另一个对象;
  • 类创建型:将对象的创建推迟到子类中。

02 5大创建型模式

在设计模式中,有 5 种创建型模式。分别为:单例模式、抽象工厂模式、工厂方法模式、建造者模式、原型模式。
image.png

下面逐一详解。

03 单例模式

单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类只有一个实例,并提供一个全局访问点以获取该实例。

单例模式的 UML 类图:

image.png

单例模式的特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

单例模式的8种实现方式:

image.png

饿汉模式

image.png

懒汉模式

image.png

双重检查锁(Double-Checked Locking)

image.png

......

单例模式的完整解析,查看这篇:

美团一面:会单例模式吗,写个单例看看?

单例模式的定义
单例模式的使用原因
单例模式的 8 种实现方式
单例模式的 4 大应用场景
单例模式的优点、缺点
单例模式的选型参考思路

04 抽象工厂模式

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

抽象工厂模式的结构图:
image.png

抽象工厂模式的构成:

  • 抽象工厂(AbstractFactory):声明了用来创建不同产品的方法;
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建;
  • 抽象产品(AbstractProduct):为每种产品声明业务方法;
  • 具体产品(Product):定义具体工厂生产的具体产品,并实现抽象产品中定义的业务方法。它同具体工厂之间是多对一的关系。

抽象工厂模式的实现 UML 图:

image.png

假设:

华为和小米生产的手机,分为两条产品线,一个是老人手机,一个是学生手机。

为了解决增加产品线的问题,我们用抽象工厂模式来实现。

源码示例:

......

抽象工厂模式的完整解析,查看这篇:

3分钟重温抽象工厂模式(电商高频使用)

05 工厂方法模式

工厂方法模式是 简单工厂模式 的进一步抽象和升级,使用频次也更高。

工厂方法模式实现了可扩展,同时满足开闭原则,解决了简单工厂模式每次添加新的产品时,都需要修改工厂类的问题。

image.png

工厂方法模式定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。

工厂方法模式的特点:

构建的都是同一类型的对象(实现相同的接口);且每一类对象对应一个工厂。

工厂方法模式的结构:

image.png

工厂方法模式的 4 个重要角色:
image.png

  • Product:抽象产品类。
  • ConcreteProduct:具体产品类,实现Product接口。
  • Factory:抽象工厂类,该方法返回一个Product类型的对象。
  • ConcreteFactory:具体工厂类,返回ConcreteProduct实例。

工厂方法模式的实现:

这里我们依然沿用《秒懂简单工厂模式》中手机产品的例子。

源码示例:
......

工厂方法模式的完整解析,查看这篇:

【重温23种设计模式】之工厂方法模式

image.png

06 原型模式

原型模式(Prototype Pattern)通过克隆现有对象来创建新对象,避免了频繁的对象实例化过程,属于创建型模式。

简单理解,就是定义一个原型对象作为创建其他对象的基础,通过克隆原型对象,我们可以创建多个具有相同属性和行为的新对象。

例如:

孙悟空有个十分牛逼的绝活儿,叫分身术,可以幻化出多个相同的孙悟空。这个幻化出的新的分身,和设计模式中的原型模式是相似的。

image.png

原型模式的 UML 类图:

image.png

原型模式的构成:

  • 客户端(Client):使用具体原型类中的 clone() 方法,来复制新的对象。
  • 抽象原型(Prototype):可以是抽象类或接口,规定了具体原型对象必须实现的 clone() 方法。
  • 具体原型类(ConcretePrototype):实现抽象原型类的 clone() 方法,它是可被复制的对象。

原型模式的实现:

将名片拷贝到自己的名片库中,分别用深拷贝和浅拷贝来实现。

源码示例:

......

原型模式的完整解析,查看这篇:

重温23种设计模式(11):原型模式

07 建造者模式

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

例如:我们要定制一台电脑,我们只需要确认配件品牌及型号,而不必知道组装电脑的这个过程。

image.png

建造者模式的 UML 类图:

image.png

建造者模式的 4 个重要角色:

  • Product(产品类) :具体需要生成的类对象;
  • Builder(抽象建造者类):为我们需要生成的类对象,构建不同的模块属性,即:公开构建产品类的属性,隐藏产品类的其他功能;
  • ConcreteBuilder(具体建造者类):抽象 Builder 类的实现类,实现抽象 Builder 类定义的所有方法,并且返回一个组建好的对象;
  • Director(指挥者类):用于统一组装流程,确定构建我们的类对象具体有哪些模块属性,在实际应用中可以不需要这个角色,直接通过 client 处理。

建造者模式的应用场景:

1)建造者模式在 Java 源码中的体现,较为典型的就是 StringBuilder。

@Override
public StringBuilder append(CharSequence s) {
    super.append(s);// 实现过程略
    return this;
}
......

建造者模式的完整解析,查看这篇:

详解建造者模式(含图例、UML类图、源码示例等)

总结

通过本文,我们了解并掌握了设计模式中的 5大创建型模式,包括它们的概念、原理、应用场景、优缺点、实现方式等。

只有我们了解了每一种设计模式,实际应用时才能够合理选型,避免因强行使用设计模式、让代码更加不好维护的情况出现。

以上,是5 大创建型设计模式的详细总结,欢迎评论区留言交流或拓展。

我是 mikechen | 陈睿 ,关注【mikechen的互联网架构】,10年+BAT架构技术倾囊相授。

新的架构专题内容,第一时间更新至:阿里架构师进阶全部合集

本文已同步我的技术博客 www.mikechen.cc,更新至我原创的《30W+字阿里架构技术合集》中。

相关文章
|
4月前
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)
|
4月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
4月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
4月前
|
设计模式 XML Java
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
文章详细介绍了简单工厂模式(Simple Factory Pattern),这是一种创建型设计模式,用于根据输入参数的不同返回不同类的实例,而客户端不需要知道具体类名。文章通过图表类的实例,展示了简单工厂模式的结构、时序图、代码实现、优缺点以及适用环境,并提供了Java代码示例和扩展应用,如通过配置文件读取参数来实现对象的创建。
【一】设计模式~~~创建型模式~~~简单工厂模式(Java)
|
4月前
|
设计模式 存储 XML
[设计模式]创建型模式-抽象工厂模式
[设计模式]创建型模式-抽象工厂模式
|
4月前
|
设计模式 测试技术 Go
[设计模式]创建型模式-简单工厂模式
[设计模式]创建型模式-简单工厂模式
|
4月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
4月前
|
设计模式 安全 测试技术
[设计模式]创建型模式-单例模式
[设计模式]创建型模式-单例模式
|
6月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
7月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
84 0