我有一个 WinForm
,我用它来构建和测试电子邮件通讯。该表单包含许多方法和事件。
我现在正在向我的程序添加一项新功能,以允许进行对比测试(A/X 测试),从而为一个事件创建最多 4 个不同的新闻通讯。
因此,我想扩展我的表单以适应普通新闻通讯和 A/X 新闻通讯。我将在我的表单中添加两种不同的模式。像这样的东西:
private enum CampaignMode { Normal, AxTest };
它们的外观非常相似,只是许多控件的可见性会发生变化。
除此之外,几乎所有方法和事件都有两种不同的处理方式。
我应该使用什么设计模式,这样我就不必创建新的单独表单?
为简单起见,假设我的表单具有以下方法:
- 构造函数:可能接收
EditMode
作为参数 - 加载
- 创建:按钮点击事件
- SetControlViews:根据
EditMode
设置控件的可见性 - 方法A:特定于
正常
模式 - 方法B:特定于
AxTest
模式
最佳答案
听起来像Template Method将是一个不错的候选人。
创建一个基类,负责基本初始化、Load()
、Create()
、SetControlViews()
和然后根据专门的逻辑将 Method()
虚拟化并在两个派生类中重写。此外,每个派生类的构造函数可以进行一些专门的初始化。
这样,您甚至不需要 CampaignMode
枚举(或者 EditMode
如果您希望它们相同)。不同实体的存在通过不同派生类的存在来说明。
关于c# - 设计模式以适应处理 Winform 功能的两种不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606880/