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

Decorator パターンでの装飾は、装飾に関係するフィールド (存在する場合) に依存しません。装飾されたクラスの動作を変更することです。ウィキの定義 で例として挙げられているように、フィールドを操作したりメソッドの戻り値を返したりするよりも、ウィンドウの描画動作を装飾した方がよい場合があります。

要するに - Wiktor Zychla がコメントしたように - 問題ありません。

于 2012-12-19T00:10:57.183 に答える