learning_notes

学习笔记

View project on GitHub

设计模式

一、创建型模式

模式 设计思想 使用场景
单例模式 确保一个类仅有一个实例,并提供全局访问点 配置管理、线程池、数据库连接池等需全局唯一资源的场景
工厂方法 定义创建对象的接口,但由子类决定实例化哪个类 需要灵活扩展对象类型(如不同数据库驱动、UI主题组件)
抽象工厂 提供一组相关或依赖对象的接口,无需指定具体类 跨平台UI库(如不同操作系统下的按钮、文本框家族)
建造者模式 分步构建复杂对象,分离构造过程与表示 创建包含多个组件的对象(如套餐组合、XML解析器)
原型模式 通过复制现有对象来创建新对象,避免重复初始化 对象创建成本高(如深拷贝复杂配置对象)、动态加载类

二、结构型模式

模式 设计思想 使用场景
适配器模式 将不兼容的接口转换为客户端期望的接口 整合第三方库(如旧系统接口适配新系统)
装饰器模式 动态地为对象添加职责,通过组合替代继承 扩展对象功能(如Java IO流、Web请求处理链)
代理模式 为其他对象提供代理以控制访问(如延迟加载、权限校验) 远程调用(RPC)、图片懒加载、AOP切面编程
组合模式 以树形结构组合对象,使客户端统一处理单个对象和组合对象 文件系统、UI组件树(如窗口包含面板和按钮)
外观模式 提供统一接口简化子系统复杂调用流程 封装复杂子系统(如电商下单流程整合支付、库存、物流)

三、行为型模式

模式 设计思想 使用场景
策略模式 定义算法族,使其可互换,独立于客户端变化 支付方式选择、排序算法切换(如按价格或销量排序商品)
观察者模式 定义对象间一对多依赖,一个对象状态变化时自动通知依赖对象 事件驱动系统(如用户登录后通知日志、邮件服务)
命令模式 将请求封装为对象,支持请求排队、日志记录、撤销/重做 文本编辑器操作撤销、任务队列(如异步任务调度)
模板方法 在父类定义算法骨架,子类实现特定步骤 框架流程固定但步骤可变(如JUnit测试生命周期、HTTP请求处理)
责任链模式 多个处理器依次处理请求,避免请求发送者与接收者耦合 审批流程(如报销多级审批)、Web过滤器链(如权限校验、日志记录)
状态模式 允许对象在内部状态改变时改变行为 游戏角色状态切换(如正常、中毒、眩晕)、订单状态流转