前几天我正在实现一个装饰器,那天晚上晚些时候,我开始怀疑像下面的例子这样的东西是否是装饰器模式的有效表示。
public abstract class Foo
{
public List<string> Names { get; set; }
public abstract string GetNames();
}
public abstract class BarDecorator : Foo
{
public abstract String GetNames();
}
public class JustAnOldBar : Foo
{
public JustAnOldBar() {
this.Names.Add("An Old Bar");
}
public override string GetNames()
{
return string.Join(",", this.Names.ToArray());
}
}
public class SomeDecorator : BarDecorator {
private Foo foo;
public SomeDecorator(Foo someFoo) {
this.foo = someFoo;
}
public override string GetNames()
{
return string.Join(",", this.Names) + "," + string.Join(",", this.foo.Names);
}
}
通常,当我实现此模式时,我会查看我正在处理的单个成员,例如成本或描述,但我想知道使用装饰器对集合进行操作是否合适,或者您是否应该开始查看构建器说到这一点。