gpt4 book ai didi

c# - 拥有一个从基类派生并且还包含它的实例的类是一个好的设计吗?

转载 作者:行者123 更新时间:2023-11-30 21:01:18 25 4
gpt4 key购买 nike

我正在设计一个基于生产者/消费者的应用程序,我一直坚持在类表示中表示生产者产生的任务。

实际问题是这样的:生产者可以生产一个StandaloneTask,它可以被消费者直接消费,或者它可以生产一个CompressTask,它必须经过一个TaskDecompressor 首先将其解压缩到多个 StandaloneTask 中,供消费者使用。

由于 StandaloneTaskCompressTask 之间有很多共同点,所以我创建了一个名为 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 的一个实例,这让我觉得很奇怪。有这样的课是正确的吗?或者是否有更好的给定案例的类表示。

最佳答案

总的来说,这种结构并不少见,你有点开始走上 Composite pattern 的道路了。 .您的 CompressTask 有点像 Composite,而您的 StandaloneTask 就像 Leaf。

我建议阅读该设计模式,并可能考虑让消费者更容易使用 TaskBase 的任何子类,无论它是 CompressTask 还是 StandaloneTask。这将加强您的设计并简化使用。

关于c# - 拥有一个从基类派生并且还包含它的实例的类是一个好的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14301214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com