装饰模式,“装饰基类”为什么要继承“被装饰物基类”
如题,
有如下C#代码:
abstract class Component //被装饰物基类
{
public abstract void Operation();
}
abstract class Decorator:Component //装饰物基类,为什么要继承“被装饰物基类”?
{
protected Component component; //可以理解,添加该成员,就是要对其进行“装饰”。但没有必要对其继承吧?
public void SetComponent(Component comp)
{
this.component = comp;
}
public override void Operation() //这里非要继承吗? 直接写为virtual不可以吗?
{
if(component != NULL)
{
component.Operation();
}
}
}
问题就如上面的注释中的内容。
谢谢?
[解决办法]
让Decorator类继承于Component,那么Decorator就可以不必在客户端出现了,降低客户端压力,让实现过程
透明。
一家之言~~~
[解决办法]
继承了被装饰物基类,才能使用其所属的函数。减少后期实现的压力
[解决办法]
需要这么做。
装饰什么?为了把被装饰之物作为装饰的参数,用继承最好。
[解决办法]
被装饰对象是:
ConcreteComponent
对ConcreteComponent进行装饰的是:
ConcreteDecoratorA
ConcreteDecoratorB
假如在对构造ConcreteDecoratorA这个对象的时候,他因为要装饰ConcreteComponent,
所以需要一个指针,这个指针传给ConcreteDecoratorA的构造函数,如果他们都是继承基类
Component,那么所有的子类都看作是Component.
这样:
new ConcreteDecoratorA( new ConcreteComponent);
new ConcreteDecoratorB(new ConcreteComponent);
new ConcreteDecoratorA( new ConcreteDecoratorB(new ConcreteComponent));