随记(软件设计复习)

                                        二十三种设计模式定义及应用场景

23种经典设计模式,分为创建型、结构型、行为型三大类,每种模式都附有核心思想与典型应用场景:

一、创建型模式(5种)
关注对象的创建机制,降低系统耦合度

单例模式(Singleton)
→ 确保一个类只有一个实例,并提供全局访问点。
📍 场景:数据库连接池、配置管理器。

工厂方法模式(Factory Method)
→ 定义创建对象的接口,让子类决定实例化哪个类。
📍 场景:日志记录器(不同格式的日志输出)。

抽象工厂模式(Abstract Factory)
→ 创建一组相关或依赖对象的家族,无需指定具体类。
📍 场景:跨平台UI组件(按钮、文本框等)。

建造者模式(Builder)
→ 将复杂对象的构建与表示分离,分步骤构造对象。
📍 场景:生成复杂的SQL查询、订单对象构造。

原型模式(Prototype)
→ 通过复制现有对象来创建新对象,而非重新实例化。
📍 场景:对象初始化成本高时(如深度克隆配置模板)。

二、结构型模式(7种)
关注类与对象的组合,形成更灵活的结构

适配器模式(Adapter)
→ 将不兼容的接口转换为可兼容的接口。
📍 场景:旧系统接口适配新系统(如USB转Type-C)。

桥接模式(Bridge)
→ 将抽象与实现解耦,使两者可独立变化。
📍 场景:图形绘制引擎(不同形状与颜色组合)。

组合模式(Composite)
→ 用树形结构表示“部分-整体”层次,统一对待单个对象与组合。
📍 场景:文件系统(文件与文件夹的统一操作)。

装饰器模式(Decorator)
→ 动态地为对象添加职责,避免继承导致的子类爆炸。
📍 场景:Java I/O流(BufferedInputStream包装FileInputStream)。

外观模式(Facade)
→ 为复杂子系统提供统一的高层接口。
📍 场景:一键启动电脑(封装CPU、内存、硬盘等启动细节)。

享元模式(Flyweight)
→ 共享细粒度对象以减少内存占用(如缓存池)。
📍 场景:文本编辑器中的字符对象共享。

代理模式(Proxy)
→ 为其他对象提供一种代理以控制访问。
📍 场景:远程代理(RPC)、虚拟代理(懒加载大图片)。

三、行为型模式(11种)
关注对象间的职责分配与通信机制

责任链模式(Chain of Responsibility)
→ 将请求沿处理链传递,直到有对象处理它。
📍 场景:审批流程(经理→总监→CEO)。

命令模式(Command)
→ 将请求封装为对象,支持撤销、队列等操作。
📍 场景:编辑器撤销/重做功能。

解释器模式(Interpreter)
→ 定义语言的语法表示,并解释执行语句。
📍 场景:SQL解析、正则表达式引擎。

迭代器模式(Iterator)
→ 提供一种顺序访问聚合对象元素的方法。
📍 场景:集合类的遍历(Java中的Iterator)。

中介者模式(Mediator)
→ 用中介对象封装一系列对象交互,降低耦合。
📍 场景:聊天室(用户不直接通信,通过服务器中转)。

备忘录模式(Memento)
→ 捕获对象内部状态并在外部保存,以便恢复。
📍 场景:游戏存档、事务回滚。

观察者模式(Observer)
→ 对象状态变化时,自动通知依赖它的所有对象。
📍 场景:事件监听、消息订阅(如Redis Pub/Sub)。

状态模式(State)
→ 允许对象在其内部状态改变时改变行为。
📍 场景:订单状态(待付款→已发货→已完成)。

策略模式(Strategy)
→ 定义一系列算法并使其可互换,客户端独立于具体算法。
📍 场景:支付方式(支付宝、微信、银行卡切换)。

模板方法模式(Template Method)
→ 在父类定义算法骨架,子类重写特定步骤。
📍 场景:JDBC模板(固定流程:连接→执行→关闭)。

访问者模式(Visitor)
→ 将算法与对象结构分离,便于新增操作而不修改结构。
📍 场景:编译器AST遍历(类型检查、代码生成)。

📌 设计模式核心原则
开闭原则:对扩展开放,对修改关闭。

依赖倒置:依赖抽象而非具体实现。

组合优于继承:优先使用对象组合而非类继承。

posted @ 2026-01-10 19:16  疯狂的yang  阅读(2)  评论(0)    收藏  举报