前几天我正在实现一个装饰器,那天晚上晚些时候我开始怀疑像下面的例子这样的东西是否是装饰器模式的有效表示。
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);
}
}
通常,当我实现这个模式时,我会查看我正在拉过的单个成员,例如成本或描述,但我想知道使用装饰器对集合进行操作是否合适,或者您是否应该开始寻找谈到这一点时,在 build 者那里。
最佳答案
在装饰器模式中,装饰对装饰所涉及的字段(如果有)没有依赖性。它是关于修 retrofit 饰类的行为。如 wiki definition 中的示例,它还不如修饰窗口的绘制行为,而不是操纵字段或方法的返回值。
简而言之 - 正如 Wiktor Zychla 评论的那样 - 没问题。
关于c# - 装饰器模式下对一个集合成员进行操作可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943205/