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