小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
装饰器模式
动态地给一个对象添加一些额外的职责,此模式属于结构性模式,它作用是对对象已有功能进行增强,但是不改变原有对象结构。
装饰器的优缺点
装饰器和模板方法、策略模式的比较
装饰器保持对象的功能不变,扩展外围功能 模板方法和策略模式则保持算法的框架不变,扩展其内部的实现
- 装饰器和继承的比较 *
扩展对象的功能 装饰器是动态,继承是静态的 装饰器可任意组合,但也可使其更复杂
装饰器的应用场景
- Servlet中的应用 HttpServletRequest/HttpServletRequestWrapper
- 同步化装饰器 Collections.synchronizedList(list)
- Java I/O流核心类库 InputSteam,OutputSteam Reader,Writer
- Spring的源码
- Tomcat DBCP源码
策略Strategy模式
定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。
其中,Context是上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用;Strategy是策略类,用于定义所有支持算法的公共接口;ConcreteStrategy是具体策略类,封装了具体的算法或行为,继承于Strategy。
应用场景:
if(){}
else if(){}
if(){} …
使用起来有三个原则:
- 封装变化;
- 多用组合,少用继承;
- 针对接口编程,不针对实现编程。