读书人

装饰模式“装点基类”为什么要继承“

发布时间: 2012-12-29 10:28:09 作者: rapoo

装饰模式,“装饰基类”为什么要继承“被装饰物基类”
如题,
有如下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));


读书人网 >C++

热点推荐