C# 用设计模式替换开关

C# 用设计模式替换开关,c#,.net,design-patterns,C#,.net,Design Patterns,这是我的类图 我还有CameraControl基类中所有字段的枚举 在PelcoDCommand类中GetCommand()的实现中,我有一个switch语句,它基于枚举返回命令 switch语句包含18个大小写(每个枚举一个)。比如说, public override byte[] GetCommand(PelcoDCommands command) { switch(command) { case PelcoDCommands.Stop: return Stop

这是我的类图

我还有CameraControl基类中所有字段的枚举

在PelcoDCommand类中GetCommand()的实现中,我有一个switch语句,它基于枚举返回命令

switch语句包含18个大小写(每个枚举一个)。比如说,

public override byte[] GetCommand(PelcoDCommands command)
{
  switch(command)
  {
    case PelcoDCommands.Stop:
      return Stop;
    case PelcoDCommands.PanUp:
      return PanUp;
    case PelcoDCommands.PanDown:
      return PanDown;
                .........
  }
}
有人能给我指出一个合适的模式来替换switch语句吗?如果有人有更好的类实现指南

编辑 抽象类的所有字段都是字节数组

以下是PelcoDCommands枚举:

public enum PelcoDCommands { PanUp, PanDown, TiltLeft, TiltRight, PanTiltUpright, PanTiltUpleft, PanTiltDownRight, PanTiltDownLeft, ZoomIn, ZoomOut, FocusNear, FocusFar, EnableThermal, DisableThermal, BlackHot, WhiteHot, SetZoomSpeed, Stop }
我还致力于实现Dictionary CommandValue,我将使用它与linq一起返回正确的值,如下所示:

Dictionary<PelcoDCommands, byte[]> CommandValue = new Dictionary<PelcoDCommands, byte[]>();
CommandValue.Add(PelcoDCommands.Stop, Stop);
CommandValue.Add(PelcoDCommands.PanUp, PanUp);
CommandValue.Add(PelcoDCommands.PanDown, PanDown);
CommandValue.Add(PelcoDCommands.TiltLeft, TiltLeft);
CommandValue.Add(PelcoDCommands.TiltRight, TiltRight);
公共覆盖字节[]GetCommand(PelcoDCommands命令) {

其中CommandValue是字典,设置如下:

Dictionary<PelcoDCommands, byte[]> CommandValue = new Dictionary<PelcoDCommands, byte[]>();
CommandValue.Add(PelcoDCommands.Stop, Stop);
CommandValue.Add(PelcoDCommands.PanUp, PanUp);
CommandValue.Add(PelcoDCommands.PanDown, PanDown);
CommandValue.Add(PelcoDCommands.TiltLeft, TiltLeft);
CommandValue.Add(PelcoDCommands.TiltRight, TiltRight);
Dictionary CommandValue=new Dictionary();
CommandValue.Add(PelcoDCommands.Stop,Stop);
CommandValue.Add(PelcoDCommands.PanUp,PanUp);
CommandValue.Add(PelcoDCommands.PanDown,PanDown);
CommandValue.Add(PelcoDCommands.TiltLeft、TiltLeft);
CommandValue.Add(PelcoDCommands.TiltRight、TiltRight);

我刚刚再次意识到我正在对GetCommand()使用PelcoDCommands枚举抽象方法声明将不起作用,因为将有其他类继承自CameraControl类。

您尝试了什么?枚举成员上的自定义属性是选项吗?还是注册对的字典?停止字段包含什么?sich不太可能有帮助的设计模式。诊断不幸的是,am让人猜测。
GetCommand
似乎是抽象的,但它的参数类型是
PelcoDCommands
?如果是这样,你肯定只能从它派生一个具体的类?我已经更新了帖子。@Damien_不信者我刚刚意识到你的意思,我必须修改基类。我应该改变它吗从抽象类到接口的实现?在编辑问题上,您的
CommandValue
集合声明是什么?在我看来,为什么不使用
Stop
PanUp
而不是直接使用
GetCommand
方法,因为它们只来自基类。