# 设计模式常考类型详解

张开发
2026/4/11 3:20:07 15 分钟阅读

分享文章

# 设计模式常考类型详解
设计模式是软件开发过程中经过反复验证的、针对特定场景下常见问题的通用解决方案。它不是语法规则而是提升代码可复用性、可维护性和可扩展性的实践经验总结。根据功能定位设计模式通常分为创建型模式、结构型模式和行为型模式三大类本次聚焦面试与考试中最常出现的5种核心模式展开分析。二、常考设计模式详情模式类型应用场景核心思想单例模式创建型全局唯一实例控制实例创建工厂方法创建型对象创建解耦子类决定实例化适配器模式结构型接口不兼容转换接口观察者模式行为型一对多通知依赖通知策略模式行为型算法可替换封装算法族2.1 单例模式Singleton核心定义确保一个类在整个程序运行周期中仅存在一个实例并提供一个全局访问该实例的统一入口。实现要点将类的构造函数私有化禁止外部通过new关键字直接创建实例类内部维护一个静态私有变量存储唯一实例提供一个公开的静态方法用于获取该唯一实例首次调用时初始化实例后续调用直接返回已有实例典型应用场景系统配置管理类避免多实例导致的配置不一致问题日志记录器统一日志写入入口防止多实例同时写文件冲突数据库连接池控制连接数量避免资源过度占用常见实现方式对比实现方式线程安全懒加载性能适用场景饿汉式是否高实例占用资源小、启动时确定需要使用懒汉式双重校验锁是是较高实例占用资源大、启动时不一定使用静态内部类是是高Java等支持静态内部类的语言场景2.2 工厂方法模式Factory Method核心定义定义一个创建对象的抽象工厂接口让子类决定实例化哪一个具体产品类将对象的实例化延迟到子类中完成。核心角色抽象产品定义产品的公共接口具体产品实现抽象产品接口的具体类抽象工厂声明创建产品的抽象方法具体工厂实现抽象工厂方法返回具体产品实例典型应用场景支付网关对接不同支付渠道微信、支付宝、银联对应不同的支付处理器通过工厂方法动态创建对应实现日志框架适配支持无缝切换Log4j、Slf4j等不同日志实现导出工具开发根据导出格式Excel、PDF、CSV创建对应的导出处理器优势符合开闭原则新增产品时只需新增对应工厂类无需修改已有代码解耦对象创建与使用调用方无需关心对象创建细节仅需依赖抽象接口2.3 适配器模式Adapter核心定义将一个类的接口转换成客户端期望的另一个接口解决接口不兼容导致无法协同工作的问题。分类类适配器通过继承适配者类实现适配单继承限制适用场景对象适配器通过组合适配者对象实现适配更灵活推荐使用典型应用场景第三方SDK集成原有系统接口与第三方接口定义不一致时通过适配器做转换层旧系统升级新系统需要复用旧系统的功能但接口不匹配的场景不同数据格式转换例如将第三方返回的XML格式数据转换为系统内部使用的JSON格式与装饰器模式的区别适配器模式的核心是接口转换目的是让不兼容的接口可以协同工作装饰器模式的核心是增强原有功能不改变原有接口仅在原有能力基础上附加新特性。2.4 观察者模式Observer核心定义定义对象间一对多的依赖关系当一个对象主题/被观察者的状态发生改变时所有依赖它的对象观察者都会收到通知并自动更新。核心角色主题Subject维护观察者列表提供注册、移除观察者和通知所有观察者的方法观察者Observer定义更新接口在收到主题通知时执行相应操作典型应用场景消息通知系统用户关注的内容更新后主动推送通知给所有关注用户事件监听机制GUI框架中的按钮点击事件监听、Spring框架中的事件驱动模型数据同步例如商品库存更新后同步通知购物车、订单、促销等相关模块优势与注意事项优势实现了主题与观察者之间的解耦支持动态添加和删除观察者注意事项当观察者数量过多时通知过程可能耗时较长需避免循环依赖导致的系统崩溃。2.5 策略模式Strategy核心定义定义一系列算法将每个算法分别封装起来让它们之间可以互相替换算法的变化独立于使用算法的客户端。核心角色抽象策略定义所有支持算法的公共接口具体策略实现抽象策略接口封装具体的算法逻辑上下文Context持有策略对象的引用提供给客户端调用的接口典型应用场景支付方式选择不同支付方式余额支付、银行卡支付、花呗支付对应不同的计算逻辑可封装为不同策略排序算法选择根据数据规模、排序要求动态选择快速排序、冒泡排序或归并排序优惠活动计算不同促销活动满减、折扣、优惠券对应不同的优惠计算规则优势避免使用大量条件判断语句if-else/switch算法可以独立演化和扩展客户端无需感知变化运行时可以动态切换算法实现三、设计模式面试考察重点概念辨析能够清晰区分相似模式的适用场景差异例如工厂方法与抽象工厂、适配器与装饰器、策略与状态模式的区别代码实现能够手写单例模式、观察者模式等核心模式的基础实现代码了解不同实现方式的优缺点场景应用能够结合实际业务场景选择合适的设计模式并说明选型理由优缺点分析能够客观分析每种模式的适用边界以及引入模式带来的额外复杂度四、设计模式使用原则使用设计模式的核心目标是提升代码质量而非为了使用模式而使用模式。实际开发中应遵循以下原则优先遵循SOLID设计原则模式是原则的具体实现手段简单优先如果简单代码可以满足需求不要过度设计引入复杂模式逐步重构当代码出现重复、扩展困难等问题时再考虑引入合适的模式优化

更多文章