设计模式(Design Patterns)

发布于:2025-08-16 ⋅ 阅读:(18) ⋅ 点赞:(0)

设计模式(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)

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

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)才是“道”。掌握本质才能灵活运用!


网站公告

今日签到

点亮在社区的每一天
去签到