当前位置: 首页 > article >正文

市面上常用的23种设计模式,分析实现方式以及实际使用场景案例

粗略介绍一遍设计模式,后续会在这个帖子更新设计模式案例场景,java

一、创建型模式(5种)

单例模式(Singleton)
实现:通过私有化构造函数、静态方法提供唯一实例,支持饿汉式、双重检查锁、静态内部类等方式保证线程安全15。
场景:数据库连接池、日志管理器、全局配置类等需唯一实例的场景。

工厂方法模式(Factory Method)
实现:定义抽象工厂接口,子类决定实例化具体类(如 ConcreteProductA 和 ConcreteProductB)53。
场景:框架中对象的创建(如Spring的BeanFactory)、动态加载不同数据库驱动。

抽象工厂模式(Abstract Factory)
实现:创建产品族的接口(如 GUIFactory 生成 Button 和 TextBox),支持跨平台兼容36。
场景:跨平台UI组件库(如Java AWT)、游戏引擎中不同风格的资源包。

建造者模式(Builder)
实现:分离复杂对象的构建与表示(如 AlertDialog.Builder),通过链式调用逐步组装对象36。
场景:创建复杂配置对象(如HTTP请求配置)、生成不同格式的文档(HTML/PDF)。

原型模式(Prototype)
实现:通过克隆现有对象创建新实例(如Java的 Cloneable 接口)36。
场景:游戏中的角色复制、避免重复初始化高成本对象(如数据库连接)。

二、结构型模式(7种)

适配器模式(Adapter)
实现:将不兼容接口转换为目标接口(如 Adapter 类包装 Adaptee)13。
场景:兼容旧系统接口、第三方库集成(如支付网关适配)。

桥接模式(Bridge)
实现:分离抽象与实现(如 Shape 抽象类与 DrawingAPI 接口解耦)36。
场景:跨平台图形渲染、消息通知渠道(短信/邮件/推送)的动态切换。

组合模式(Composite)
实现:树形结构统一处理叶子与容器节点(如文件系统目录与文件)36。
场景:UI组件嵌套(如菜单与子菜单)、组织架构管理。

装饰器模式(Decorator)
实现:动态添加职责(如 BufferedReader 包装 FileReader 增加缓冲功能)35。
场景:Java I/O流扩展、Web中间件链(如日志、鉴权装饰器)。

外观模式(Facade)
实现:提供子系统统一入口(如 PaymentFacade 封装支付、通知等操作)36。
场景:简化复杂API调用(如电商下单流程)、微服务网关。

享元模式(Flyweight)

实现:共享细粒度对象(如字符缓存池、线程池)36。
场景:游戏中的粒子特效、文本编辑器中的字符重复使用。

代理模式(Proxy)
实现:控制对象访问(如远程代理、延迟加载代理)35。
场景:Spring AOP事务管理、图片懒加载、VPN访问控制。

三、行为型模式(11种)

观察者模式(Observer)
实现:定义一对多依赖(如 Subject 维护 Observer 列表并通知更新)25。
场景:事件驱动系统(如按钮点击)、股票价格变动通知。

策略模式(Strategy)
实现:封装算法族并动态切换(如支付方式选择支付宝/微信)23。
场景:排序算法选择、优惠券计算规则(满减/折扣)。

模板方法模式(Template Method)
实现:定义算法骨架,子类重写步骤(如JUnit测试生命周期)23。
场景:工作流程标准化(如订单处理)、框架中的钩子方法。

责任链模式(Chain of Responsibility)
实现:请求沿处理链传递(如 FilterChain 处理HTTP请求)36。
场景:审批流程(如报销审批)、异常处理链。

命令模式(Command)
实现:封装请求为对象(如 Runnable 接口)36。
场景:撤销/重做操作、任务队列调度。

迭代器模式(Iterator)
实现:提供遍历聚合对象的方法(如Java集合的 Iterator)23。
场景:自定义集合遍历、数据库查询结果分页。

中介者模式(Mediator)
实现:集中管理对象交互(如聊天室协调用户消息)36。
场景:GUI组件通信、分布式系统中的协调服务。

备忘录模式(Memento)
实现:保存对象状态以便恢复(如游戏存档)36。
场景:事务回滚、文档编辑的历史记录。

状态模式(State)
实现:对象行为随状态改变(如订单状态流转)36。
场景:电梯运行状态、游戏角色行为切换。

访问者模式(Visitor)
实现:解耦数据结构与操作(如 Element 接受 Visitor 访问)36。
场景:编译器语法树分析、报表生成器。

解释器模式(Interpreter)
实现:定义语法规则并解释(如正则表达式引擎)36。
场景:SQL解析、数学公式计算。

四、设计模式的核心价值

解耦与复用:通过抽象接口隔离变化(如工厂模式隐藏对象创建细节)36。
扩展性:新增功能无需修改原有代码(如装饰器模式动态扩展)35。
可维护性:通过模式规范代码结构(如观察者模式简化事件通知逻辑)25。


http://www.kler.cn/a/586118.html

相关文章:

  • Flask实现分页的三种方法
  • 面试之《前端常见的设计模式》
  • spring boot程序启动时读取覆盖配置文件中的变量
  • 蓝桥杯备考:红黑树容器map应用---英语作文
  • React19源码系列之FiberRoot节点和Fiber节点
  • springboot validation 校验字段是否为空
  • Java开发之微服务架构设计:Spring Cloud Alibaba核心组
  • 探索HTML5 Canvas:创造动态与交互性网页内容的强大工具
  • 从前端视角理解消息队列:核心问题与实战指南
  • 基于Transformer的医学文本分类:从BERT到BioBERT
  • 3.14-1列表
  • C++【类和对象】(超详细!!!)
  • iPhone 17系列新机模上手,横向矩阵镜头+超薄机身,清新白色设计
  • Flask-Login完整使用案例
  • iOS 模块化架构设计:主流方案与实现详解
  • SpringCloud 学习笔记1(Spring概述、工程搭建、注册中心、负载均衡、 SpringCloud LoadBalancer)
  • 大数据如何赋能零售行业进行产品创新
  • 大语言模型微调和大语言模型应用的区别?
  • 基于SpringBoot + Vue 的房屋租赁系统
  • Spring Boot 读取 ZooKeeper (ZK) 属性的总结指南