2

前几天我正在实现一个装饰器,那天晚上晚些时候,我开始怀疑像下面的例子这样的东西是否是装饰器模式的有效表示。

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);
    }
}

通常,当我实现此模式时,我会查看我正在处理的单个成员,例如成本或描述,但我想知道使用装饰器对集合进行操作是否合适,或者您是否应该开始查看构建器说到这一点。

4

1 回答 1

1

在装饰器模式中,装饰不依赖于装饰中涉及的字段(如果有的话)。它是关于修改装饰类的行为。如wiki 定义中的示例,它可能只是装饰窗口的绘制行为,而不是操作字段或方法的返回值。

简而言之——正如 Wiktor Zychla 评论的那样——这没有问题。

于 2012-12-19T00:10:57.183 回答