设计模式

创建型

主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。

1.单例模式 Singleton Pattern

2.工厂模式 Factory Pattern

用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。

工厂模式的4大作用:

  • 封装变化:创建逻辑有可能变化,封装工厂类之后,创建逻辑的变更对调用者透明。
  • 代码复用:创建代码抽离到独立的工厂类之后可以复用。
  • 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。
  • 控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。

工厂模式经典的应用场景:

  • 依赖注入框架 Spring IOC、Google

三种细分模式:

  1. 简单工厂 Simple Factory Pattern
  2. 工厂方法 Factory Method Pattern
  3. 抽象工厂 Abstract Factory Pattern

3.建造者模式 Builder Pattern

用来创建复杂对象,可以通过设置不同的可选参数,“定制化”的创建不同的对象。
使用场景:
类属性过多,为了避免构造参数列表过长,可以配合使用set()函数来解决,但是有下列其中一种情况就需要使用建造者模式了:

  1. 必填属性过多,全部放置到构造方法中参数列表过长,使用set()又无法校验是否已填,此时就可使用建造者模式。
  2. 类的属性之间有一定的依赖关系;
  3. 希望创建不可变对象,即set()函数不能向外暴漏。

4.原型模式(不常用)Prototype Pattern

利用已有对象(原型)进行复制(拷贝)的方式,来创建对象,以达到节省创建时间的目的。
两种实现方法:

  1. 浅拷贝
    只复制对象中的基本数据类型的数据 和 引用对象的内存地址,不会递归的复制引用对象,以及无引用对象的引用对象
  2. 深拷贝
    拷贝完全独立的对象,更耗时也更耗内存空间。

结构型

1.适配器模式 Adapter Pattern

意图:
将目标类型的接口转换为客户期望的接口,从而使接口不兼容的类一起协作。
应用场景:
1. 当某个已存在的类提供的接口不是客户期望的接口
2. 当想在不必提供兼容接口的客户类种重用目标类
优缺点:
1.适配器静态绑定到被适配对象,无法重新适配其他目标对象。

2.桥接模式 Bridge Pattern

意图:
使抽象与实现分离,以便两者自由变化。
应用场景:

  1. 解耦合抽象与实现
  2. 抽象和实现需要分别自由扩展
    优缺点:
    1.增加了设计类的数量

3.组合模式 Composite Pattern

4.装饰者模式 Decortor Pattern

5.门面模式 Facade Pattern

6.享元模式 Flyweight Pattern

7.代理模式 Proxy Pattern(Surrogate)

意图:
为目标对象提供一个占位对象或代理对象,用来控制客户端对目标对象的访问。

应用场景:

  1. 控制昂贵对象的实例化;
  2. 控制客户端访问目标对象的权限;
  3. 为远程对象提供本地引用代理。

优缺点:

  1. 代码结构变复杂

角色类:
Subject 目标接口
RealSubject 目标接口实现类(昂贵类)
Proxy

行为型

1.责任链模式 Chain of Responsibility Pattern

2.命令模式 Command Pattern

3.解释器模式 Interpreter Pattern

4.迭代器模式 Iterator Pattern

5.仲裁者模式 Mediator Pattern

6.备忘模式 Memento Pattern

7.观察者模式 Observer Pattern

一对多的依赖

8.状态模式 State Pattern

9.策略模式 Strategy Pattern

意图:
定义一组算法,单独封装,使算法能够对使用它的上下文自由变化。

应用场景:

  1. 一组类只在行为(业务行为)上不同;
  2. 一个算法需要实现不同的变体;
  3. 向使用算法的上下文屏蔽算法具体数据结构

优缺点:

  1. 客户端对象必须选择具体策略
  2. 有可能破坏上下文对象的封装性

角色类:
Context 上下文
Startegy
ConcreteStrategy

策略模式详解

10.模板模式 Template Method Pattern

11.访问者模式 Visitor Pattern

12.中介模式

参考

- [1]  王争.23种设计模式的原理、背后的思想、应用场景[N].InfoQ 微博文章,2021-1-26
- [2] Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides.设计模式[M].北京:机械工业出版社,2019.3(2020.6重印)
- [3] 朱洪军.软件设计模式[Vidoe].学堂在线(2020秋).2020

仅用作学习非商用,侵权联系本人,立即删除。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

holyZhang2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值