【问题标题】:Defined combinations of objects design pattern对象设计模式的定义组合
【发布时间】:2015-01-22 11:23:52
【问题描述】:

在互联网上研究了一些之后,试图找出最好的设计模式让我头疼。我要解决的问题是对象组合的创建。

例如,我有对象组合,其中需要使用定义数量的 Task 对象创建 Event 对象:

事件 1 - 任务 1、任务 2、任务 3

事件 2 - 任务 2、任务 3

理想情况下,我想要一种创建 Event 对象的简单方法,而不需要类似:

Event.Add(Task1)
Event.Add(Task2)

等等等等 理想情况下,我希望看到类似 Event1.Add(Task1).Add(Task2).Add(Task3) 的内容。

我还需要能够单独从事件中检索任务。

任务需要可重用。

【问题讨论】:

  • 搜索 C# 的集合初始值设定项,或将 AddRange 与对象数组一起使用
  • 解决问题并不总是需要模式。
  • 好吧,我提供的示例是为了简化问题,需要为不断增长的 20 多个事件 50 多个任务设置一些体面的东西来解决问题。

标签: c# design-patterns


【解决方案1】:

Builder Pattern 怎么样

public class Event {
    public Event(IEnumerable<Task> tasks) {...}
}

使用像这样的构建器 api

new EventBuilder().AddTask(....).AddTask(....).AddTask(....).Build();

【讨论】:

  • 谢谢,我已经看过了。但是这种模式的实现似乎不太适合这种情况
【解决方案2】:

你可以像这样流利一点...

var e = new EventFoo().Add(new Task()).Add(new Task());

public class EventFoo
{
    public EventFoo()
    {
        Tasks = new List<Task>();
    }
    public List<Task> Tasks { get; private set; }

    public EventFoo Add(Task task)
    {
        Tasks.Add(task);
        return this;
    }
}

如果您要创建一组常规事件,您还可以将它们的创建移至工厂。

【讨论】:

  • 这也是我的选择之一。我认为现在可以这样做,不知道这在越来越多的事件和任务中是否仍然可持续,它的可维护性。
  • 这就是工厂或构建器模式可以派上用场的地方,但在需要它们之前无需构建它们。
  • 使用构建器模式,我是否还必须按照事件处理程序或单独的类来定义所有类型的 Event 对象?唯一不同的事件是任务的数量。因此,如果可能的话,我真的只想坚持使用 2 个类 Event 和 Task :) 必须有一种更好的方法来管理大量这些对象,这些对象的一个​​属性的值可能会有所不同跨度>
  • 不,构建器模式只是为您提供了一种创建对象版本的方法,无论出于何种原因,这些对象的配置都不同——不必是不同的类型。
  • CoR 不适合这个,正如我之前所说,在需要之前不需要运行模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2011-06-30
  • 2016-11-23
相关资源
最近更新 更多