设计模式(Design Patterns)

设计模式(Design Patterns) 是软件工程中解决常见设计问题可复用、最佳实践方案 。它们不是现成的代码,而是经过验证的设计思想模板,帮助开发者构建灵活、可维护、可扩展的软件系统。


设计模式的核心价值

  1. 复用经验:避免重复"造轮子",直接使用行业沉淀的成熟解决方案。
  2. 标准化沟通:如"用单例模式实现",开发者立刻理解设计意图。
  3. 解耦代码:降低模块间的依赖性,提升系统灵活性。
  4. 提高可维护性:代码结构清晰,易于修改和扩展。

设计模式的分类(23种经典模式)

根据目的可分为三类:

1. 创建型模式(Creational)

解决对象创建问题,隔离实例化过程。

  • 单例(Singleton):确保一个类仅有一个实例(如全局配置对象)。
  • 工厂方法(Factory Method):让子类决定创建哪种对象。
  • 抽象工厂(Abstract Factory) :创建相关对象的家族(如不同风格的UI组件)。
  • 建造者(Builder):分步构造复杂对象(如拼装电脑)。
  • 原型(Prototype):通过克隆现有对象创建新对象。
2. 结构型模式(Structural)

解决类与对象组合问题,构建灵活结构。

  • 适配器(Adapter):让不兼容的接口协同工作(如转接头)。
  • 装饰器(Decorator):动态添加功能(如给咖啡加糖)。
  • 代理(Proxy):控制对象访问(如远程代理、缓存代理)。
  • 外观(Facade):简化复杂子系统的接口(如一键关闭所有设备)。
  • 桥接(Bridge):分离抽象与实现,使两者独立变化。
  • 组合(Composite):统一处理树形结构(如文件系统)。
  • 享元(Flyweight):共享细粒度对象,减少内存占用(如字符池)。
3. 行为型模式(Behavioral)

解决对象间职责分配与通信问题。

  • 观察者(Observer):一对多的状态通知(如事件监听)。
  • 策略(Strategy):封装算法,使其可互换(如支付方式)。
  • 命令(Command):将请求封装为对象(如撤销/重做操作)。
  • 状态(State):让对象在不同状态下行为不同(如电梯运行状态)。
  • 模板方法(Template Method):定义算法骨架,子类重写步骤。
  • 迭代器(Iterator):提供遍历集合的统一接口。
  • 责任链(Chain of Responsibility):让多个对象依次处理请求(如审批流程)。

示例:单例模式(Singleton)

场景:全局只需一个实例(如数据库连接池)。

java 复制代码
public class DatabasePool {
    // 1. 私有静态实例
    private static DatabasePool instance;
    
    // 2. 私有构造方法(禁止外部new)
    private DatabasePool() {}
    
    // 3. 全局访问点
    public static synchronized DatabasePool getInstance() {
        if (instance == null) {
            instance = new DatabasePool();
        }
        return instance;
    }
}
// 使用:DatabasePool pool = DatabasePool.getInstance();

学习设计模式的关键原则

  1. 理解场景:模式解决什么问题?何时用?何时不用?
  2. 遵循SOLID原则
    • 单一职责(一个类只做一件事)
    • 开闭原则(对扩展开放,对修改关闭)
    • 里氏替换(子类可替换父类)
    • 接口隔离(接口尽量小而专)
    • 依赖倒置(依赖抽象而非具体实现)
  3. 避免滥用:强行套用模式可能使代码更复杂。

推荐资源

  • 书籍:《设计模式:可复用面向对象软件的基础》(GoF经典)
  • 图解:Refactoring.Guru 网站(链接
  • 实践:在开源项目(如Spring、JDK)中观察模式应用。

设计模式是"术",设计原则(如SOLID)才是"道"。掌握本质才能灵活运用!

相关推荐
BD_Marathon23 分钟前
设计模式——合成复用原则
设计模式·合成复用原则
书院门前细致的苹果11 小时前
设计模式大全:单例、工厂模式、策略模式、责任链模式
设计模式·责任链模式·策略模式
BD_Marathon20 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon20 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
jmxwzy20 小时前
设计模式总结
设计模式
J_liaty2 天前
23种设计模式一代理模式
设计模式·代理模式
苏渡苇2 天前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
短剑重铸之日2 天前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
feasibility.2 天前
AI 编程助手进阶指南:从 Claude Code 到 OpenCode 的工程化经验总结
人工智能·经验分享·设计模式·自动化·agi·skills·opencode
BD_Marathon2 天前
七大设计原则介绍
设计模式