目录

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

市面上常用的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。