以下场景要遵循的设计模式

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 个地方,第二个引用了我链接的那个地方) 感谢您的编辑。我在报价的开头添加了一个超链接。 .猜猜这更明显。 你说得对,我现在明白了。很高兴我找到了正确的来源:-) 是的,我认为在引用之前或之后明确提及来源是引用文本的正确方式。

以上是关于以下场景要遵循的设计模式的主要内容,如果未能解决你的问题,请参考以下文章

架构师内功心法之设计原则

如何做好测试用例设计

不得不会的23种Java设计模式——单例模式

23种设计模式-简单工厂模式

网页设计中流行用css+div,但是要遵循一个规范,才能真正发挥优化作用。大家有啥心得来交流一下呀

创业团队组织架构设计首先要遵循哪个原则?