本文整理自网络资料,简要的介绍下设计模式的种类和实现了这些设计模式的java代码例子。
1.设计模式简介
设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。
拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。
2.设计模式三大分类
2.1创建型
名称 | 作用 | 举例 |
---|---|---|
Singleton (单例模式) | 确保一个类只有一个实例,并提供该实例的全局访问点。 | |
Simple Factory (简单工厂) | 在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 | |
Factory Method (工厂方法) | 定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。 | |
Abstract Method (抽象工厂) | 提供一个接口,用于创建相关的对象家族 。 | |
Builder (生成器) | 封装一个对象的构造过程,并允许按步骤构造。 | |
Prototype (原型) | 使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。 |
2.2 行为型
名称 | 作用 | 举例 |
---|---|---|
Chain Of Responsibility (单例模式) | 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。 | |
Command (命令模式) | 将命令封装成对象中,具有以下作用:
| |
Interpreter (解释器模式) | 为语言创建解释器,通常由语言的语法和语法分析来定义。 | |
Iterator (迭代器模式) | 提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 | |
Meditator (中介者模式) | 集中相关对象之间复杂的沟通和控制方式。 | |
Memento (备忘录模式) | 在不违反封装的情况下获得对象的内部状态,从而在需要时可以将对象恢复到最初状态。 | |
Observer (观察者模式) | 定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态。 主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。 | |
State (状态模式) | 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。 | |
Strategy (策略模式) | 定义一系列算法,封装每个算法,并使它们可以互换。 策略模式可以让算法独立于使用它的客户端。 | |
Template Method (模板方法) | 定义算法框架,并将一些步骤的实现延迟到子类。 通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。 | |
Visitor (访问者模式) | 为一个对象结构(比如组合结构)增加新能力。 | |
Null (空对象模式) | 使用什么都不做的空对象来代替 NULL。 一个方法返回 NULL,意味着方法的调用端需要去检查返回值是否是 NULL,这么做会导致非常多的冗余的检查代码。并且如果某一个调用端忘记了做这个检查返回值,而直接使用返回的对象,那么就有可能抛出空指针异常。 |
2.3 结构型
名称 | 作用 | 举例 |
---|---|---|
Adapter (适配器模式) | 把一个类接口转换成另一个用户需要的接口。 | |
Bridge (桥接模式) | 将抽象与实现分离开来,使它们可以独立变化。 |
|
Composite (组合模式) | 将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 | |
Decorator (装饰模式) | 为对象动态添加功能。 | |
Facade (外观模式) | 提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 |
|
Flyweight (享元模式) | 利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 | |
Proxy (代理模式) | 控制对其它对象的访问。 |
参考资料
0.设计模式
1.设计模式(1):简单工厂模式(Simple Factory Pattern)
https://blog.csdn.net/u012877472/article/details/61932112
2.中介者模式在JDK源码中的应用
https://blog.csdn.net/qq_36970993/article/details/112406703
3.网上有关design pattern的教程
https://www.runoob.com/design-pattern/design-pattern-tutorial.html
https://refactoring.guru/design-patterns
https://sourcemaking.com/design_patterns/
https://blogs.oracle.com/javamagazine/design-patterns-2