c# - 装饰器模式下对一个集合成员进行操作可以吗?

标签 c# oop design-patterns decorator builder

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

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/

相关文章:

c# - 这可以通过 javascript 实现吗?

c# - 如何在特定的 jwt 上下文下发出 post 请求 webclient

c# - FluentAssertions Should().BeEquivalentTo() 失败,列表包含从相同接口(interface)派生的运行时指定类型

javascript - 我如何使用对象字面量模式代替构造函数

java - Java 中的变量继承

java - 代号一日历 UpdateButtonDayDate() 问题

消息系统的 C++ 设计模式?

c# - 泛型继承

java - bloated class 和 tagged class 有什么区别?

java - 在 Http Requester 的 Java 设计方面需要帮助