以下场景要遵循的设计模式
Posted
技术标签:
【中文标题】以下场景要遵循的设计模式【英文标题】:Design Pattern to be followed for the scenario below 【发布时间】:2014-07-31 00:40:44 【问题描述】:我有三种不同类型的设置(每个对应一个类)。考虑一下,我们知道必须遵循的设置(比如 1、2 和 3)。现在,每个设置都需要不同的设置。
假设,我们有 SettingB、SettingC、SettingD,除了 SettingA 之外的所有三种设置都是通用的。所以,我所做的是,我对所有设置类型(A、B 和 C)都有一个通用界面设置。
interface IConfigureSettings
void ConfigureSettings();
对于每个设置类型仅公开此方法以进行配置。
在 SettingA 中,我们有子设置(SubSettingsAA、SubSettingsAB、SubSettingsAC)。 因此,为此,我有一个 SettingA 的抽象类,它由 SubSettingAA、SubSettingAB、SubSettingAC 继承。
abstract class SettingA : IConfigureSettings
List<SettingA> _subSettings;
public void ConfigureSettings()
//Should Perform configuration for the given site. This is what I need.
在这些子设置中,SubSettingsAA 和 SubSettingsAB 可能有 2 种不同的配置(比如 configurationA()、ConfigurationB())。 ConfigurationA() 不在 SubSettingsA 中。 SubSettingsAB 类同时包含 ConfigurationA() 和 ConfigurationB()。
class SubSettingsAA : SettingA
ConfigurationB();
class SubSettingsAB : SettingA
ConfigurationA();
ConfigurationB();
class SubSettingAC : SettingA
ConfigurationC();
ConfigurationD();
现在,在 Setup1 的情况下,只有 ConfigurationA() 是可见的,而在 setup2 和 setup3 的情况下,一切都将被配置。 SubSettingAC 中的 Configuration's() 将针对所有三种设置进行配置。
所以,这就是我所拥有的。现在,我想要的是为 SettingA 调用 ConfigureSettings(),它应该根据设置类型配置所有内容。考虑一下,设置类型可用。
【问题讨论】:
稍微修改了问题。为 SubSettings 添加了另一种方案。很抱歉给您带来不便。 我认为我们没有足够的信息来建议设计。如果不了解这些类的更多信息,我们不知道多态性或泛型在多大程度上是合适的,或者哪些支持模式可能有用。还有大量信息,我们很难处理。我知道这是问题性质的一部分,但您最好尝试确定一些更具体的问题并专注于这些问题,以及一些最少的代码(甚至只是接口规范) 这样更好吗?如果您对此有任何疑问,请告诉我。让我知道是否需要更改现有的类结构或其他任何内容。我需要知道我应该在 SettingA 的 ConfigureSettings() 中做什么来实现上述场景。 是的,好多了!一件事,你想用第三个代码 sn-p 表示什么?例如,ConfigurationB();
是 SubSettingsAA
类上的方法吗?
是的,认为 ConfigurationB() 是 SubSettingsAA 类中的一个方法。抱歉,函数名称不合适
【参考方案1】:
Patterns 不是程序设计的灵丹妙药。它们不会取代传统的 面向对象的分析技术,如 CRC 卡或用例 造型。要使用架构类比,分析可以让您确定 你的房子需要 200 安培的电力。图案让你 确定如何安装布线。模式确实可以帮助您思考 关于您在设计系统时可能遇到的问题。 因此,通用的、基于模式的解决方案通常比 一个人为解决特定问题而设计的解决方案。 鉴于常用的设计模式的数量(以及许多 几乎每天都有更多的发明和发现)有时可能是 很难选择适合您需要的图案。你的第一件事 应该决定问题是否从根本上是创造性的, 结构或行为。当然,有些问题有以下几个方面 两个甚至三个,并且可能需要您混合和匹配模式。
来自gofpatterns
不过,我认为您的问题的第一部分似乎是创造性的,而 Builder 模式似乎是最接近的匹配项。我会使用组合(通过接口)根据子设置来设置配置。此外,Configuration A 和 SubsettingsAC 类似乎是 Configuration 和 Subsetting 类的基类。
【讨论】:
@demoncodemonkey 我认为 cmets 是一种比编辑更好的与发帖人交流的方式。但是,我同意您在编辑说明中留下的评论。我添加了对可以找到此文本的页面的引用。 (我用谷歌搜索了 2 个地方,第二个引用了我链接的那个地方) 感谢您的编辑。我在报价的开头添加了一个超链接。 .猜猜这更明显。 你说得对,我现在明白了。很高兴我找到了正确的来源:-) 是的,我认为在引用之前或之后明确提及来源是引用文本的正确方式。以上是关于以下场景要遵循的设计模式的主要内容,如果未能解决你的问题,请参考以下文章