1. 外观模式
也叫面门模式。
1.1. PROS
- 在客户端与子系统之间实现解耦。
- 简化调用过程,客户端无需关系子系统细节,符合迪米特原则。
1.2. CONS
- 不符合开闭原则
- 扩展新的子系统时存在风险
1.3. 区别
中介者模式关心子系统间的交互,而外观模式关心客户端与子系统之间的交互。
1.4. 源码案例
- Spring#JdbcUtils
- Mybatis#Configuration
- tomcat#RequestFacade
2. 装饰者模式
用途:扩展一个类的功能。支持动态添加功能,动态撤销功能。
2.1. PROS
- 比继承更加灵活
- 装饰类之间支持排列祝贺
- 符合开闭原则
2.2. CONS
- 提升程序的复杂性
2.3. 区别
代理模式关心控制访问类的权限,而装饰者模式关系增强类地行为。
装饰者模式和适配器模式都可以叫包装模式Wrapper
,但它们两个关心点不同,适配器模式关心接口之间的转换。
2.4. 装饰者是否需要为抽象类?
当业务要求子类必须实现抽象父类(装饰者)的某些抽象方法时,装饰者就需要是抽象类。
2.5. 源码案例
- FilterInputStream
- Spring#TransactionAwareCacheDecorator
- HttpServletRequestWrapper
- Mybatis#Cache