【Java】23种设计模式——概述
什么是设计模式?是一套反复使用,经过分类编码、代码设计经验性的总结。
设计的核心原则
-
面向对象设计原则 。 编程时基本要遵守,高内聚低耦合。
-
单一职责原则 。一个类,只敢一件事。例如,程序员写代码、歌手唱歌、球员打球。类具象化了,一旦需要哪个方法,就可以知道从哪个类调用了。
-
开闭原则 。 开:提供方提供
抽象类/接口/方法 等,实现类可以决定行为。闭:调用方调用时,尽量不需要修改代码 。 -
依赖倒置原则 。 高层模块不依赖底层实现,均依赖抽象。 传统的方法中,没有接口,而是依赖类与类之间的对象创建。一旦需求编号,类就需要重写,这样其他类也需要修改。
-
里氏替换原则 。 子类可以替换父类的功能,但不能覆盖父类的抽象方法。
public abstract class Coder { public abstract void eat(); //这个行为还是定义出来,但是不实现 public void coding() { // 父类方法,不能被子类重载。 System.out.println("我会打代码"); } class JavaCoder extends Coder{ public void game(){ //子类自己的额外的方法 System.out.println("艾欧尼亚最强王者已上号"); } public void eat(){ //子类实现父类的抽象方法(必须) System.out.println("干啥啥不行,干饭第一名!") } } } -
接口隔离原则 。 对接口进行细分,避免接口中定义的方法,在实现类中用不上。
-
合成复用原则。 优先使用对象组合,而不是通过集成达到复用的目的。
class A { public void connectDatabase(){ System.out.println("我是连接数据库操作!"); } } class B { A a; public B(A a){ //在构造时就指定好 this.a = a; } public void test(){ System.out.println("我是B的方法,我也需要连接数据库!"); a.connectDatabase(); //也是通过对象A去执行 } } -
迪米特法原则(最小知识原则)。一个类/模块,对其他模块有越少的交互越好。
23种设计模式的分类及核心特点总结
| 模式类型 | 模式 | 说明 |
|---|---|---|
| 创建型模式(5种) | 单例模式 | 确保一个列仅有一个实例,并提供全局访问点 典型实现:双重检查锁定、静态内部类 |
| 工厂方法模式 | 将对象创建延迟到子类,通过接口定义创建逻辑 | |
| 抽象工厂模式 | 创建相关产品族,强调多系统列对象的协同和生成 | |
| 建造者模式 | 分步构建复杂对象,分离构造过程与表示 | |
| 原型模式 | 通过克隆现有对象生成新对象,减少重复初始化开销 | |
| 结构型模式(7种) | 适配器模式 | 转换接口兼容性,使不兼容类可协调工作 |
| 桥接模式 | 解耦抽象与实现,允许两者独立变化 | |
| 组合模式 | 树形结构处理部分-整体关系,统一操作方式 | |
| 装饰器模式 | 动态添加职责,替代继承扩展功能 | |
| 外观模式 | 提供统一接口简化子系统调用复杂度 | |
| 享元模式 | 共享细粒度对象,减少内存消耗 | |
| 代理模式 | 控制对象访问,增强功能(如远程代理、虚拟代理) | |
| 行为模式(11种) | 策略模式 | 封装算法族,运行时灵活切换策略 |
| 模板方法模式 | 定义算法骨架,子类重写特定步骤 | |
| 观察者模式 | 定义一对多依赖,实现事件通知机制 | |
| 迭代器模式 | 统一遍历集合元素,隐藏底层结构 | |
| 责任链模式 | 请求沿处理链传递,动态分配处理者 | |
| 命令模式 | 将请求封装对象,支持撤销、队列操作 | |
| 备忘录模式 | 捕获对象状态,支持回滚与恢复 | |
| 状态模式 | 封装状态行为,随状态改变动态调整逻辑 | |
| 访问者模式 | 分离数据结构与操作,随状态变动 | |
| 中介者模式 | 集中管理对象交互,降低耦合度 | |
| 解释器模式 | 定义语法规则,解析特定领域语言 |
应用场景
接下来,看看23种设计模式的应用场景如下图:

有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

浙公网安备 33010602011771号