私は先日デコレーターを実装していましたが、その夜遅くに、以下の例のようなものがデコレーター パターンの有効な表現であるかどうか疑問に思い始めました。
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);
}
}
通常、このパターンを実装するときは、コストや説明のように引っ張ってきた単一のメンバーを見ていますが、デコレーターを使用してコレクションを操作するのが適切なのか、それともビルダーを見始める必要があるのか 疑問に思いますここまできたら。