← 返回首页
一、设计原则(SOLID)
- S - 单一职责:一个类只负责一个功能领域
- O - 开闭原则:对扩展开放,对修改关闭
- L - 里氏替换:子类可以替换父类且程序行为不变
- I - 接口隔离:客户端不应依赖它不需要的接口
- D - 依赖倒置:高层模块不依赖低层模块,都依赖抽象
- 迪米特法则:最少知识原则,只与直接朋友通信
二、创建型模式(5种)
- 单例模式:全局唯一实例。推荐枚举实现或静态内部类(懒加载+线程安全)。双重检查锁需 volatile 防止指令重排。Spring Bean 默认单例
- 工厂方法:定义创建对象的接口,子类决定实例化哪个类。如
Collection.iterator()
- 抽象工厂:创建一系列相关对象的接口,不指定具体类。如数据库驱动工厂
- 建造者模式:分步构建复杂对象。如
StringBuilder、Lombok @Builder
- 原型模式:通过克隆创建对象。注意深拷贝 vs 浅拷贝,
Cloneable 接口
三、结构型模式(7种)
- 代理模式:为对象提供代理以控制访问。静态代理 / JDK 动态代理(接口)/ CGLIB(类)。Spring AOP 核心
- 适配器模式:将不兼容接口转换为兼容接口。如
InputStreamReader 将字节流适配为字符流
- 装饰器模式:动态添加职责,比继承更灵活。如
BufferedInputStream 装饰 InputStream
- 桥接模式:将抽象与实现分离,独立变化。如 JDBC 驱动架构
- 外观模式:为子系统提供统一入口。如 SLF4J 统一日志门面
- 组合模式:树形结构表示部分-整体关系。如文件系统目录结构
- 享元模式:共享细粒度对象减少内存。如
Integer.valueOf() 缓存池、String 常量池
四、行为型模式(11种)
- 策略模式:定义算法族,运行时可互换。如
Comparator、支付方式选择
- 模板方法:父类定义算法骨架,子类实现具体步骤。如
AbstractList、Spring JdbcTemplate
- 观察者模式:一对多依赖,状态变化自动通知。如 Spring 事件机制
ApplicationEvent
- 责任链模式:请求沿链传递直到被处理。如 Servlet Filter、Spring Interceptor
- 命令模式:将请求封装为对象,支持撤销/队列。如线程池
Runnable
- 状态模式:对象行为随内部状态改变。如订单状态流转
- 迭代器模式:顺序访问集合元素而不暴露内部结构。如
Iterator 接口
- 中介者模式:用中介对象封装对象间交互。如 MVC 中的 Controller
- 备忘录模式:保存和恢复对象状态。如编辑器撤销功能
- 访问者模式:在不修改类的前提下定义新操作。如 ASM 字节码操作
- 解释器模式:定义语言文法并解释执行。如正则表达式、SpEL