前言:本篇系看完《研磨设计模式》一书的个人理解和总结,可能存在不正确的地方,看时需要持怀疑态度。另外,所有的图都是示意图,示意,示。
装饰器模式(Decorator):
几点解释:
- 装饰器模式的本质在于,透明的给对象增加新的功能,并且这些功能可以灵活的组合和增减。
- 如果没有了那个抽象类,其实就和代理模式的结构是一致的了,二者的区别已经在前面代理模式说过了。
- 装饰对象会持有一个实际的对象或者是已经被装饰之后的对象,因为大家都是实现了同一个接口。通过层层嵌套的方式,给实际的对象增加很多新的功能。
- 实际使用时,需要在客户端先创建实际的对象,之后将其传入一个装饰对象中,之后还可以将装饰对象再传入装饰对象之中。实际调用时,是向最外层的装饰对象发起调用,之后的过程有点类似于递归调用。
- Java中的IO库,使用的就是装饰器模式,各种的 InputStream 可以灵活的嵌套使用。
职责链模式(Chain of Responsibility):
几点解释:
- 职责链模式的本质在于 将各种不同的职责分离并封装,使得在使用时可以动态组合。
- 一个请求过来,会有多个对象都有机会处理,此时将这些对象组装成链(内链、外链),只需要将请求发送给第一个对象,这个请求就会在职责链中传递,标准的职责链有一个对象处理了就会返回。
- 如果将职责链进行变形,不是有一个处理就返回,而是每个对象都会做出一些处理,处理完成后将请求传递给下一个对象,此时就变成了一条功能链。职责链变形成功能链之后,其实和装饰模式很像了,装饰模式也是一条链。不同点在于:装饰模式大多相互依赖,这个装饰对象一般会依赖上一个装饰对象返回的结果,并在此基础上进行进一步操作,而职责链模式一般相互独立,各处理各的,处理完只是简单的将请求转发给下一个对象。
- 链的形成可以是内链,即 一个对象持有下一个对象的引用,依次调用,也可以用有序容器将这些对象组装为外链,由外部统一调用。