【面向对象】(二十三种)设计模式总结

设计模式的三原则:

1. 面向接口编程,而非实现;

2. 多用组合,少用继承;

3. 高内聚、低耦合;

第一部分: 创建型模式

1.1、单件模式(Singleton)

看另一篇博客

https://blog.csdn.net/hefrankeleyn/article/details/99703244

1.2、工厂方法模式(Factory Method)

【面向对象】(二十三种)设计模式总结_第1张图片

1.3、原型模式(Prototype)

关键是创建clone方式,有时候该方法很复杂。

【面向对象】(二十三种)设计模式总结_第2张图片

1.4、抽象工厂模式(AbstractFactory)

AbstractFactory通常会用工厂方法(Factory Method)现实,也可以用Prototype现实。一个具体的工厂通常是一个单件。

【面向对象】(二十三种)设计模式总结_第3张图片

1.5、Builder 生成器模式

封装对象的创建过程。

【面向对象】(二十三种)设计模式总结_第4张图片

下面是生成器模式的时序图:

【面向对象】(二十三种)设计模式总结_第5张图片

 

第二部分 结构型模式

组合类和对象以获得更大的结构

2.1 Adapter 适配器模式

适配器模式: 将类接口转变为客户希望的另一个接口。

适配器模式有两种实现方式: 对象适配、类适配(在Java中无法实现,因为需要多继承)。

两种方式的类图如下:

【面向对象】(二十三种)设计模式总结_第6张图片

2.2 Birdge 桥接模式

将抽象部分和实现部分相分离,使它们可以独立变化。

抽象类与抽象类之间的关系称之为桥接。

【面向对象】(二十三种)设计模式总结_第7张图片

桥接模式时序图:

2.3 Composite 组合模式

组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

【面向对象】(二十三种)设计模式总结_第8张图片

2.4 装饰者模式

装饰模式: 动态地给一个对象添加一些额外的职责。

【面向对象】(二十三种)设计模式总结_第9张图片

2.5 外观模式

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,这个接口使得子系统更加容易使用。

【面向对象】(二十三种)设计模式总结_第10张图片

2.6 Flyweight亨元模式

如果让某个类的一个实例能用来提供许多“虚拟实例”, 就使用亨元模式。主要用于减少创建对象的数量,以减少内存占用和提供性能。

一种场景:创建一个对象,通过修改对象的属性,重复利用。

【面向对象】(二十三种)设计模式总结_第11张图片

2.7 Proxy 代理模式

代理模式: 为其他对象提供一种代理以控制对这个对象的访问。

【面向对象】(二十三种)设计模式总结_第12张图片

Java动态代理

【面向对象】(二十三种)设计模式总结_第13张图片

第三部分:行为模式

3.1 Chain Of Responsibility 职责链模式

使多个对象都有机会处理某一个请求。职责链模式将请求的发送者和接受者解耦。

下面是一个实例:

https://refactoring.guru/design-patterns/chain-of-responsibility/java/example#example-0--middleware-Middleware-java

【面向对象】(二十三种)设计模式总结_第14张图片

3.2 Command 命令模式

将请求封装成一个对象,从而可以使用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

client  相当于main方法,Invoker 相当于遥控器,对遥控器上的按钮设置Command。main方法中初始化接收者和具体命令的对象。 【面向对象】(二十三种)设计模式总结_第15张图片

时序图如下:

 

3.3 Interpreter 解释器模式

为语言创建解释器。 

如果一种特定类型的问题发生的频率足够高,那么就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

【面向对象】(二十三种)设计模式总结_第16张图片

 

3.4 Iterator 迭代器模式

提供一种方法顺序访问一个聚合对象的各个元素,而不暴露其内部的表示。

文章:包(Bag)、队列(Queue)、堆栈(Stack)的实现

【面向对象】(二十三种)设计模式总结_第17张图片

3.5 中介者模式(Mediator Pattern)  

下面是中介者模式的类图

参考了一篇博客: https://blog.csdn.net/zhengzhb/article/details/7430098

【面向对象】(二十三种)设计模式总结_第18张图片

3.6 备忘录模式(Memento)

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。

参考博文:https://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html

【面向对象】(二十三种)设计模式总结_第19张图片

3.7 观察者模式(Observer)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。

【面向对象】(二十三种)设计模式总结_第20张图片

 

3.8 状态模式(State)

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

如果使用数据值定义内部状态并且让Context操作来显式地检查这些数据。但这样将使整个Context的实现中遍布看起来相似的条件语句或case语句。增加一个新的状态可能需要改变若干个操作,这就使得维护变得复杂了。

【面向对象】(二十三种)设计模式总结_第21张图片

3.9 策略模式(Strategy)

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

【面向对象】(二十三种)设计模式总结_第22张图片

3.10 模板方法模式(Template Method)

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结结构即可重定义该算法的某些特定步骤。

【面向对象】(二十三种)设计模式总结_第23张图片

3.11 访问者模式(Visitor)

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

参考博客:https://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html

 

 

你可能感兴趣的:(设计模式)