常用的设计模式有哪些:适配多数开发场景
常用的设计模式包含23种经典GoF设计模式,分为创建型、结构型、行为型三大类,其中日常开发高频使用的有单例、工厂、适配器、装饰器、观察者、策略模式等,创建型模式负责规范对象创建逻辑、降低创建耦合,结构型模式负责整合类与对象、优化代码结构,行为型模式负责统筹对象交互、规范业务逻辑流转,多数业务系统开发可优先使用上述高频模式,底层框架开发则需要覆盖全部经典模式,小型简单业务项目无需过度套用设计模式,会增加代码冗余度。
常用的设计模式之创建型模式
创建型设计模式核心作用是隔离对象创建与使用逻辑,让你无需关注对象创建细节,直接调用即可获取实例,有效降低代码耦合度。单例模式是使用率最高的创建型模式,能确保一个类在程序运行中仅有一个实例,全局统一调用,适合配置类、工具类、连接池类场景,开发中优先使用饿汉式单例,线程安全且实现简单,懒汉式需手动处理线程同步问题,存在一定出错概率。工厂模式分为简单工厂、工厂方法、抽象工厂三类,简单工厂适合单一品类对象创建,工厂方法支持拓展同品类不同对象,抽象工厂可批量创建多品类关联对象,日常业务开发以简单工厂和工厂方法为主。建造者模式用于构建参数复杂、参数可选的对象,可分步组装对象属性,避免大量重载构造方法,原型模式则通过复制已有对象实例生成新对象,适合创建成本较高的对象场景。
常用的设计模式之结构型模式
结构型设计模式专注于类和对象的组合搭建,通过灵活组合、适配、拓展原有代码结构,在不修改原有代码的前提下实现功能迭代,完全契合软件开发开闭原则。适配器模式可兼容新旧接口、第三方接口差异,将不匹配的接口转换为业务所需接口,常用于对接第三方SDK、老旧系统改造场景。装饰器模式能够动态为原有对象叠加新功能,无需修改原类代码,典型应用场景是JavaIO流、业务权限叠加、数据二次加工。代理模式通过代理对象控制真实对象的访问,可实现权限校验、日志记录、事务控制等通用功能,分为静态代理和动态代理,框架开发中动态代理应用更为广泛。除此之外,桥接模式用于分离抽象与实现维度,避免类爆炸问题,组合模式适配树形层级结构数据处理,外观模式通过统一入口简化复杂系统调用,享元模式通过复用对象减少内存占用,适合大量重复对象创建场景。
常用的设计模式之行为型模式
行为型设计模式聚焦对象之间的通信、交互和职责分配,规范复杂业务的执行流程与逻辑分发。观察者模式是典型的事件驱动模式,定义一对多的依赖关系,一个对象状态更新后,所有依赖对象自动响应更新,适用于消息推送、事件监听、数据同步场景。策略模式可以封装多种算法与业务规则,可根据场景动态切换执行逻辑,彻底消除代码中大量的if-else、switch判断,常用于支付方式选择、折扣计算、排序规则切换。模板方法模式定义算法固定骨架,将可变步骤交由子类实现,统一业务执行流程,保证核心逻辑不被篡改。
状态模式根据对象自身状态切换行为逻辑,解决状态繁多导致的代码臃肿问题,适合订单流转、设备状态控制等场景。责任链模式将多个处理节点串联,请求依次经过节点处理,可灵活增减处理节点,常用于权限校验、请求过滤、异常分级处理。迭代器模式提供统一的集合遍历方式,屏蔽不同集合的底层实现差异,访问者模式可在不修改元素类的前提下拓展元素操作功能,备忘录模式用于对象状态备份与恢复,命令模式将请求封装为对象,实现请求的排队、撤销与重试,解释器模式用于自定义语法规则解析,多用于简单规则引擎开发。
高频模式优先掌握。
根据2024年《开发者技术生态调研报告》显示,业务开发中单例、工厂、策略、观察者、适配器五种模式的使用率占比超85%,是项目落地的核心设计模式,其余模式多用于框架底层、复杂架构设计场景。开发者无需全盘掌握23种模式,可根据项目复杂度针对性选用,中小型业务系统掌握前五类高频模式即可满足开发需求,大型分布式系统需补充代理、模板方法、责任链等模式优化架构。
| 模式分类 | 核心作用 | 高频场景 | 使用难度 |
|---|---|---|---|
| 创建型 | 规范对象创建、解耦创建逻辑 | 工具类、对象批量创建 | 较低 |
| 结构型 | 优化代码结构、兼容拓展功能 | 接口适配、功能叠加 | 中等 |
| 行为型 | 规范对象交互、拆分复杂逻辑 | 事件分发、规则切换 | 中等偏高 |
设计模式的适用边界是仅适用于面向对象开发场景,函数式编程、脚本式开发场景强行套用设计模式,会大幅增加代码冗余和维护成本,无法提升开发效率。同时单一设计模式无法适配所有业务场景,复杂业务架构需要多种模式组合使用,单一模式套用容易出现逻辑漏洞。
