设计模式学习笔记二:创建型模式

本文详细介绍了设计模式中的创建型模式,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式,分别阐述了它们的定义、优缺点以及适用场景,为初学者提供了对这些模式的理解和应用指导。
摘要由CSDN通过智能技术生成

设计模式学习笔记二:创建型模式

1: 单例模式 --singleton

  • 1.1 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,提供全局访问的方法。
  • 1.2 要点:(1)某个类只能有一个实例;(2)它必须自行创建这个实例;(3)它必须自行向整个系统提供这个实例
  • 1.3 分类:饿汉单例、懒汉单例、IoDH技术(增加一个静态内部类,在内部类创建单例对象)
  • 1.4 优点:提供了对唯一实例的受控访问、只有一个对象可以节约系统资源
  • 1.5 缺点:没有抽象层,扩展困难; 职责过重违背单一职责原则;
  • 1.6 适用场景:系统只需要一个实例对象、客户调用类单个实力只允许一个公共访问点
  • 1.7 经典场景:数据库连接池对象使用

2: 简单工厂模式(不属于23个经典设计模式) --simpleFactory

  • 2.1 定义:定义一个工厂类,它可以根据参数的不同返回不同类的实例,它不是属于GoF23个景丹设计模式,作为学习其他工厂模式的基础
  • 2.2 要点:当你需要什么,只需要传入一个正确的参数就可以获取你所需要的对象
  • 2.3 三个角色:Factory(工厂角色)、Product(抽象产品角色)、ConcreteProduct(具体产品角色)
  • 2.4 优点:实现对象创建和使用的分离
  • 2.5 缺点:工厂类集中了所以产品创建逻辑,职责过重;系统扩展困难,添加新产品就不得不修改工厂逻辑,将违背开闭原则
  • 2.6 适用场景:工厂类负责创建的对象比较少,保证工厂类逻辑不能太复杂

3: 工厂方法模式 --factoryMethod

  • 3.1 定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例,简称工厂模式
  • 3.2 四个角色:Product(抽象产品)、ConcreteProduct(具体产品)、Factory(抽象工厂)、ConcreteFactory(具体工厂)
  • 3.3 优点:只需关心所需产品工厂,无须关心创建细节;加入新产品,无须修改抽象工厂和抽象产品提供的接口,系统扩展性好,完全符合开闭原则
  • 3.4 缺点:每增加一个产品需要增加对应工厂,即每个工厂只能生产一种产品
  • 3.5 适用场景:抽象工厂类通过其子类来指定创建哪个对象。
  • 3.6 场景举例:一个程序来读取各种不同类型的图片格式、再比如日志Log4j

4: 抽象工厂模式 --abstractFactory

  • 4.1 定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类
  • 4.2 新概念:产品等级结构(产品类型)–产品的继承结构,如父类抽象类电视机,其子类有海尔电视机、海信电视机、TCL电视机
  • 4.3 新概念:产品族(品牌)–同一个工厂生产的,位于不同产品等级结构中的一组产品,如:海尔电器工厂生产海尔电视机、海尔电冰箱等
  • 4.4 四个角色:AbstractFactory(抽象工厂)、ConcreteFactory(具体工厂)、AbstractProduct(抽象产品)、ConcreteProduct(具体产品)
  • 4.5 优点:每个工厂可以生产多个产品,如果新建一座工厂很方便,不需要修改客户端消费者代码;新增新产品很方便,无须修改已有系统,符合开闭原则
  • 4.6 缺点:新增一个产品等级需要调整代码,是抽象工厂最大缺点
  • 4.7 适用场景:同一个产品族中的产品可以是没有任务关系的对象,但是他们都具有一些共同的约束。例如同一个操作系统的按钮和文本框

5: 原型模式 --prototype

  • 5.1 定义:先定义自身对象,通过自身克隆新的对象
  • 5.2 三个角色:Prototype(抽象原型类)、ConcretePrototype(具体原型类)、Client(客户类)
  • 5.3 分类:浅克隆(成员变量地址引用)、深克隆(成员变量直接克隆)
  • 5.4 优点:简化对象创建过程,通过复制已有实例、扩展性较好
  • 5.5 缺点:每个类需要增加一个克隆方法,需要修改已有类的源代码,违背了开闭原则
  • 5.6 适用场景:创建新对象成本较大,如初始化需要占用较长的时间、占用太多的CPU资源互网络资源。

6: 建造者模式 --builder

  • 6.1 定义:将一个复杂对象的构建与它的表建造者模式(建造者模式)示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。
  • 6.2 四个角色:Builder(抽象建造者)、ConcreteBuilder(具体建造者)、Product(产品角色)、Director(指挥者)
  • 6.3 核心:在于如何一步一步的构建一个包含多个组成部分件的完整对象,使用相同的构建过程构建不同的产品。
  • 6.4 优点:客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦、可以更加精细地控制产品的创建过程
  • 6.5 缺点:如果产品之间差异性很大,就不适合使用建造者模式,其使用范围有一定的限制。
  • 6.6 适用场景:需要生成的产品对象有复杂的内部结构同时生成的产品对象的属性相互依赖,需要指定其生成顺序
  • 6.7 场景举例:视频播放软件提供多种界面显示模式:完整模式、精简模式、记忆模式、网络模式,在不用模式下组成元素有所差异。

声明:学习内容均来自《设计模式的艺术》这本书

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值