如何实现字节命令类

问题描述 投票:0回答:2

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

最好为每个命令创建一个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的最佳方法。

c# class design-patterns
2个回答
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
投票

qazxsw poi设计模式可能适合您的实施。

© www.soinside.com 2019 - 2024. All rights reserved.