【发布时间】:2013-01-13 06:27:54
【问题描述】:
我正在设计一个基于生产者/消费者的应用程序,并且我坚持在类表示中表示生产者生成的任务。
实际问题是这样的:生产者可以产生一个StandaloneTask,它可以被消费者直接消费,或者它可以产生一个CompressTask,它必须先通过TaskDecompressor,然后先将其提取到一个消费者可以消费的StandaloneTask的数量。
由于StandaloneTask 和CompressTask 之间有很多共同点,所以我创建了一个名为TaskBase 的基类,其中包含所有这些通用信息。
class abstract TaskBase
{
}
class StandloneTaskType1: TaskBase
{
}
class StandloneTaskType2: TaskBase
{
}
.
.
.
class StandloneTaskTypeN: TaskBase
{
}
解压任务的工作原理是什么?
一个任务可以有一个或多个需要在运行时填写的参数。压缩任务由一个带有参数的任务和有关如何获取需要在这些参数中填充的值的其他信息组成。获取值后,TaskDecompressor 假设将所有这些值填充到参数化任务中以生成一个或多个独立任务。
我创建了一个CompressTask 类,如下所示。
class CompressTask: TaskBase
{
TaskBase task;
//runtime parameters
}
现在,CompressTask 派生自 TaskBase 并且它还包含 TaskBase 的实例,这对我来说看起来很奇怪。有这样的课是正确的吗?或者有没有更好的给定案例的类表示。
【问题讨论】:
-
听起来像是装饰器模式。
-
没关系。谷歌“复合模式”是一种众所周知的设计模式,它是派生类具有其基类型的集合的示例。
标签: c# oop class class-diagram