下面的场景要遵循的设计模式
本文关键字:设计模式 | 更新日期: 2023-09-27 18:07:59
我有三种不同类型的设置(每种设置对应一个类)。考虑一下,我们知道必须遵循的设置(例如out of 1,2和3)。现在,每种设置都需要不同的设置。
-
假设我们有SettingB, SettingC, SettingD,这是除了SettingA之外的所有三个设置共同的。所以,我所做的是,我有一个通用的接口设置所有的设置类型(a, B和C)。
interface IConfigureSettings { void ConfigureSettings(); }
只有这个方法才会被每个设置类型所暴露。
在SettingA中,我们有子设置(SubSettingsAA, SubSettingsAB, SubSettingsAC)。
对于这个,我有一个抽象类SettingA它继承自SubSettingAA SubSettingAB SubSettingACabstract 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()它应该根据设置类型配置一切。
从gofpatterns模式都不是程序设计的万灵药。它们不能取代传统面向对象的分析技术,如CRC卡或用例建模。使用架构类比,分析可以让您确定你的房子需要200安培的电。模式让你确定如何安装线路。模式确实能帮助你思考关于你在设计系统时可能遇到的问题。因此,通用的、基于模式的解决方案通常比一个人为解决特定问题而设计的解决方案。考虑到常用的设计模式的数量(以及许多)几乎每天都有更多的发明和发现)很难选择适合你需要的模式。你首先要做的应该决定的是这个问题从根本上是否是创造性的,结构的,或者行为的。当然,有些问题有一些方面两个甚至三个,并且可能需要您混合和匹配模式。
然而,我认为你的问题的第一部分似乎是创造性的,而Builder模式似乎是最接近的匹配。我会使用组合(通过接口)来根据子设置设置配置。此外,类Configuration A和SubsettingsAC似乎是Configuration和Subsetting类的基类。