一表总结 Java 的3种设计模式与6大设计原则

设计模式通常分为三大类:创建型、结构型和行为型。

  • 创建型模式:主要用于解决对象创建问题
  • 结构型模式:主要用于解决对象组合问题
  • 行为型模式:主要用于解决对象之间的交互问题

创建型模式

创建型模式关注于对象的创建机制,提供了创建对象的灵活性。以下是Java中的创建型设计模式:

类型 具体名称 特点
创建型 单例模式 确保一个类只有一个实例,并提供一个全局访问点。
创建型 工厂方法模式 定义一个接口用于创建对象,但由子类决定实例化哪个类。
创建型 抽象工厂模式 提供一个接口,用于创建相关或依赖对象的家族。
创建型 建造者模式 使用多个简单的对象一步步构建一个复杂的对象。
创建型 原型模式 通过复制现有的实例来创建新的实例。

结构型模式

结构型模式关注于如何将类或对象组合成更大的结构。以下是Java中的结构型设计模式:

类型 具体名称 特点
结构型 适配器模式 将一个类的接口转换成客户端所期望的另一种接口。
结构型 装饰器模式 动态地给对象添加额外的职责。
结构型 代理模式 为其他对象提供一种代理以控制对这个对象的访问。
结构型 组合模式 将对象组合成树形结构以表示"部分-整体"的层次结构。
结构型 外观模式 为子系统中的一组接口提供一个统一的高层接口。
结构型 桥接模式 将抽象部分与实现部分分离,使它们可以独立变化。
结构型 享元模式 通过共享对象来有效地支持大量细粒度的对象。

行为型模式

行为型模式关注于对象之间的通信、交互。以下是Java中的行为型设计模式:

类型 具体名称 特点
行为型 观察者模式 定义了一种一对多的依赖关系,状态改变时自动更新。
行为型 策略模式 定义了一系列算法,并将每一个算法封装起来。
行为型 命令模式 将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。
行为型 状态模式 允许一个对象在其内部状态改变时改变其行为。
行为型 责任链模式 将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。
行为型 备忘录模式 捕获对象的内部状态,以便在未来恢复。
行为型 迭代器模式 提供一种方法顺序访问一个集合对象中的元素。
行为型 访问者模式 在不改变元素类的前提下定义作用于这些元素的新操作。
行为型 中介者模式 通过一个中介者对象来封装一系列的对象交互。
行为型 解释器模式 定义一种语言的文法表示,并定义一个解释器来处理该语言。
行为型 过滤器模式 允许通过一系列的处理对象来过滤请求。

六大设计原则

名称 特点
单一职责原则(SRP) 一个类应该只有一个引起它变化的原因。也就是说,一个类只应该有一个职责。
开放-关闭原则(OCP) 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即通过添加新代码扩展功能,而不是修改现有代码。
里氏替换原则(LSP) 子类对象应该能够替换父类对象,程序的功能不受影响。即子类必须能够完全替代父类。
接口隔离原则(ISP) 一个类对另一个类的依赖应该建立在最小的接口上。即客户端不应该依赖它不需要的接口。
依赖倒置原则(DIP) 高层模块不应该依赖低层模块,二者都应该依赖抽象。即应该依赖于接口而不是具体实现。
合成复用原则(CRP) 尽量使用组合/聚合的方式,而不是使用继承。即优先选择组合而不是继承来实现代码复用。

汇总表格

类型 具体名称 特点
创建型 单例模式 确保一个类只有一个实例,并提供一个全局访问点。
工厂方法模式 定义一个接口用于创建对象,但由子类决定实例化哪个类。
抽象工厂模式 提供一个接口,用于创建相关或依赖对象的家族。
建造者模式 使用多个简单的对象一步步构建一个复杂的对象。
原型模式 通过复制现有的实例来创建新的实例。
结构型 适配器模式 将一个类的接口转换成客户端所期望的另一种接口。
装饰器模式 动态地给对象添加额外的职责。
代理模式 为其他对象提供一种代理以控制对这个对象的访问。
组合模式 将对象组合成树形结构以表示"部分-整体"的层次结构。
外观模式 为子系统中的一组接口提供一个统一的高层接口。
桥接模式 将抽象部分与实现部分分离,使它们可以独立变化。
享元模式 通过共享对象来有效地支持大量细粒度的对象。
行为型 观察者模式 定义了一种一对多的依赖关系,状态改变时自动更新。
策略模式 定义了一系列算法,并将每一个算法封装起来。
命令模式 将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。
状态模式 允许一个对象在其内部状态改变时改变其行为。
责任链模式 将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。
备忘录模式 捕获对象的内部状态,以便在未来恢复。
迭代器模式 提供一种方法顺序访问一个集合对象中的元素。
访问者模式 在不改变元素类的前提下定义作用于这些元素的新操作。
中介者模式 通过一个中介者对象来封装一系列的对象交互。
解释器模式 定义一种语言的文法表示,并定义一个解释器来处理该语言。
过滤器模式 允许通过一系列的处理对象来过滤请求。
相关推荐
青柠之夏cc9 小时前
Python Java PHP底层对比:内存并发性能全解析
开发语言·python·线程
半亩码田10 小时前
C#转Python第5.1篇:异步编程:asyncio vs async/await,语法相似但机制不同
开发语言·python·c#
灯澜忆梦10 小时前
【Linux】#5 | 文件与目录基础操作命令
java·linux·运维
字节跳动的猫10 小时前
LikeShop 搜索功能优化二开:中文分词、商品权重排序与搜索热词管理
android·java·中文分词
计算机毕设定制辅导-无忧学长10 小时前
《基于微信小程序的校园文化活动报名与管理系统》
java·spring boot·微信小程序·uniapp·校园文化活动报名与管理小程序
靠沿10 小时前
MySQL数据库基础——索引的使用&alter、explain关键字
java·数据库·mysql
96245610 小时前
餐饮 SaaS 优惠券系统架构演进(七)营销定价引擎设计:活动、会员价、优惠券、买赠如何在同一 PriceQuote 中可解释地组合
java·运维·算法
码匠许师傅10 小时前
【C++三方组件】redis-plus-plus:现代 Redis C++ 客户端
java·c++·redis
LMT_Lanmantech10 小时前
MATLAB合规管理:如何避免侵权赔偿和审计风险
开发语言·matlab·信息可视化
ab12376810 小时前
MQTT笔记
java·笔记·mqtt·学习