design-patterns - 重构帮助-策略模式

标签 design-patterns refactoring strategy-pattern

这里的目的是更新 UI。我通常在客户端上执行此操作,但是此应用程序使用隐藏的代码。无论如何,我的问题是我正在尝试清理这些 if else 语句,并且我认为策略模式可能是合适的。我不需要为我做所有的事情,但如果你能给我一些指导,让我继续前进。我是否要先创建一个接口(interface),然后每个策略都实现该接口(interface)?泛型在这里有用吗?接口(interface)中应该包含哪些类型的方法?任何能让我继续前进的事情都将非常感激。

if (someObject.Status == 'A') {
                    btnRecordCall.Enabled = false;
                    btnAddMailOrStatusAction.Enabled = false;
                    btnPayments.Enabled = false;
                    btnAddressMaint.Enabled = false;
                    btnFilter.Enabled = false;
                    btnAddCoverage.Enabled = false;
                    btnPolicyForms.Enabled = false;
                    lblIsArchived.Text = "********** THIS CLAIM HAS BEEN ARCHIVED **********";
                } else if (someObject.Status == 'D') {
                    btnRecordCall.Enabled = false;
                    btnAddMailOrStatusAction.Enabled = false;
                    btnPayments.Enabled = false;
                    btnAddressMaint.Enabled = false;
                    btnFilter.Enabled = false;
                    btnAddCoverage.Enabled = false;
                    btnPolicyForms.Enabled = false;
                    lblIsArchived.Text = "- De-archive Request Pending";
                } else {
                    btnRecordCall.Enabled = true;
                    btnAddMailOrStatusAction.Enabled = true;
                    btnPayments.Enabled = true;
                    btnAddressMaint.Enabled = true;
                    btnFilter.Enabled = true;
                    btnAddCoverage.Enabled = true;
                    btnPolicyForms.Enabled = true;
                    lblIsArchived.Text = "";
                }

谢谢, 〜ck

最佳答案

如果所有按钮都获得相同的启用,无论状态如何,如您的示例所示,那么我会将其隐藏在按钮列表中,然后迭代它们。然后你的策略参数可以归结为一个 bool 值和一个字符串——无论如何,做到这一点都很容易。如果它的复杂性更大,那么实现设置控件的接口(interface)的不同类将是有序的,可能具有保存整体逻辑的抽象父类(super class)。

关于design-patterns - 重构帮助-策略模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160132/

相关文章:

用于限制返回对象的可用方法的 Java 设计模式

c# - 为现有类创建接口(interface)?

design-patterns - Haskell:设计模式:类或传递函数

java - 创建要包含在列表中的动态类/对象

c++ - 什么IDE可以成功地将所有变量的类型从QSharedPointer更改为boost::shared_ptr?

java - 在 Eclipse 中重命名包

javascript - 如何更好地编写这个查询字符串?

java - 是否有保证 execute(T t) 方法的内置 Java 类型?

c++ - 在没有指针的情况下在 C++ 中实现策略模式

c# - 用工厂模式保存数据?