推荐一种设计模式

BZi*_*ink 8 c# design-patterns solid-principles

我正在处理的一个应用程序处理工作项.根据工作项的状态,可以使用许多操作."完成""取消""重新分配"等...

为了提供动作的功能,我现在有一个看起来像这样的界面......

public interface IActionProvider{
    public void Complete(WorkItem workItem);
    public void Cancel (WorkItem workItem);
    public void Reassign(WorkItem workItem);
}
Run Code Online (Sandbox Code Playgroud)

然后根据工作项的其他细节,我有接口的具体实现.仅举例......

public class NormalActionProvider :IActionProvider
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

public class UrgentActionProvider : IActionProvider
{
   ....
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我想添加一个新动作,请说......"委托"我必须更新界面,当然这对所有实现都有影响.

这违反了开/关原则吗?你能推荐一个可以帮助我的设计模式或重构吗?

iso*_*bar 11

看起来命令模式是合适的.您可以修改/添加更多命令.命令类与主程序分离.

public interface IActionProvider{
    public void execute(WorkItem item,ActionType actionType);
}
Run Code Online (Sandbox Code Playgroud)

ActionType表示完成,取消等.您可以继续添加更多操作类型和插件适当的命令类.