用设计模式替换开关

时间:2018-07-17 08:17:47

标签: c# .net design-patterns

这是我的课表 enter image description here

对于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语句的正确模式吗?如果有人有更好的类实现指南?

编辑

Abstract类的所有字段都是字节数组。

这是PelcoDCommands枚举:

public enum PelcoDCommands { PanUp, PanDown, TiltLeft, TiltRight, PanTiltUpright, PanTiltUpleft, PanTiltDownRight, PanTiltDownLeft, ZoomIn, ZoomOut, FocusNear, FocusFar, EnableThermal, DisableThermal, BlackHot, WhiteHot, SetZoomSpeed, Stop }

我还在努力实现将与linq配合使用的Dictionary CommandValue,以返回正确的值,如下所示:

公共重写字节[] GetCommand(PelcoDCommands命令)     {

    SetCommandChecksum();
    var cmd = CommandValue.Where(x => x.Key == command);
    return **/*still working on it*/**;
}

CommandValue是Dictionary且设置如下:

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);

我只是认为我正在将PelcoDCommands枚举用于GetCommand()抽象方法声明,该声明不起作用,因为还会有其他类继承自CameraControl类。

0 个答案:

没有答案