装饰模式

装饰模式是用于对象的创建,而此对象的创建基于原来对象的加强,也就是通过原组件对象的参数传递,把此对象层层加强。例如:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
通过层层的参数传递,把InputStream适配为InputStreamReader再装饰加强为BufferedReader。这里的参数的传递是关键,是通过引用而非继承方式。

装饰器中的继承的实质是为了类的兼容的需要,便于参数引用可以层层传递兼容,而不是通过继承实现功能的扩展,功能扩展主要在实例的引用。一般来说是纵向结构,如果只是一层继承实现,其余装饰类用横向实现的话,也是可以的,但是这个和纵向相比没有什么不同。

装饰器模式主要由两部分组成,一部分是组件,另一部分是装饰器。组件是本体,也就是初始的、最里层的参数;组件是加强件,供功能扩展时使用,顶层装饰器拥有组件的引用,装饰类可以任意组合。

其对象具有怎样的功能并不是决定于其继承结构和层次,而是在这个对象构造的时候使用到了那些类的引用,那其功能就是这些对象的总功能。
装饰器一般有一个抽象装饰器作为其顶级装饰器,包括共享的属性和方法。而抽象装饰器的所有子类从原则上来说是平等的,彼此不依赖,以便于对象构造时的功能组装。
纯净的装饰器没有扩展方法。

代码:
A a = new A();      // component
B b = new B(a);     // decorator
C c = new C(b);     // decorator: sub class of B
D d = new D(a);     // decorator: sub class of C
b具备的功能:a+b
c具备的功能:a+b+c
d具备的功能:a+d




你可能感兴趣的:(C++,c,C#)