如何实现字节命令类

时间:2018-07-08 07:32:29

标签: c# class design-patterns


我正在寻找有关实施课程的最佳实践的指南。
我的案子:
我想创建一个用于控制PTZ摄像机的类。该命令作为字节[]通过网络发送到摄像机。 有2个协议具有不同的命令和值,因此我将为每个协议创建一个类。

最好为每个命令创建一个byte []并将它们列出在类中,然后根据用户输入更改值。例如:

协议A

byte[] up =   { 0xff, 0x12, 0x03, 0x04, .... }
byte[] down = { 0xff, 0x1a, 0x03, 0x05, .... }
byte[] left = { 0xff, 0x10, 0x03, 0x02, .... }
byte[] right ={ 0xff, 0x02, 0x03, 0x06, .... }
void setUpValue(byte speed)
{ 
    up[3]=speed;
}

还是我根据用户请求动态创建byte []?

编辑


我正在为2个PTZ控制协议创建一个库,我想为每个协议创建一个类。例如,ProcotolAControl和ProcotolBControl。

我想知道使我的代码更具模块化和OOP的最佳方法。

2 个答案:

答案 0 :(得分:1)

您可以将抽象类ProcotolControlBase创建为这两个类合同,让ProcotolAControlProcotolBControl类继承ProcotolControlBase

  • ProcotolAControlProcotolBControl在自定义类中形成自己的详细信息逻辑。
  • 您可以在ProcotolAControlProcotolBControl构造函数上设置Procotol默认数据。

看起来像这样。

public abstract class ProcotolControlBase {
    protected byte[] _up;
    protected byte[] _down;
    protected byte[] _left;
    protected byte[] _right;

    public void SetUpValue(int index,byte speed)
    {
        _up[index] = speed;
    }

    public void SetDownValue(int index, byte speed)
    {
        _down[index] = speed;
    }
}
public class ProcotolAControl : ProcotolControlBase
{
    public ProcotolAControl() {
        _up = new byte[] { 0xff, 0x12, 0x03, 0x04 };
        _down = new byte[] { 0xff, 0x1a, 0x03, 0x05 };
        _left = new byte[] { 0xff, 0x10, 0x03, 0x02 };
        _right = new byte[] { 0xff, 0x02, 0x03, 0x06 };
    }
}

public class ProcotolBControl : ProcotolControlBase {
    public ProcotolBControl()
    {
        _up = new byte[] { 0xff, 0x12, 0x03, 0x04 };
        _down = new byte[] { 0xff, 0x1a, 0x03, 0x05 };
        _left = new byte[] { 0xff, 0x10, 0x03, 0x02 };
        _right = new byte[] { 0xff, 0x02, 0x03, 0x06 };
    }
}

使用时会

ProcotolControlBase procotol = new ProcotolAControl(); //use ProcotolAControl
ProcotolControlBase procotol1 = new ProcotolBControl(); //use ProcotolBControl

答案 1 :(得分:1)

Template method设计模式可能适合您的实现。