关于消息构造对象的设计(100分)

  • 主题发起人 主题发起人 youweibin
  • 开始时间 开始时间
Y

youweibin

Unregistered / Unconfirmed
GUEST, unregistred user!
目前正设计一个网络通讯方面的软件,该软件有许多种的消息,比如登录消息、注册消息等等,消息采用XML格式传送,为了封装消息的构造,设计了一个抽象类,接口如下所示,Build方法生成消息,PacketCount表示消息包个数(因为规定每个消息包大小不超过1024个字节),Packets用于访问每个消息包。
TPacketBuilder = class
protected
function GetPacketCount: Integer; virtual; abstract;
function GetPacket(Index: Integer): TByteDynArray; virtual; abstract;
public
procedure Build; virtual; abstract;
property PacketCount: Integer read GetPacketCount;
property Packets[Index: Integer]: TByteDynArray read GetPacket;
end;

下面是一个登录消息构造类
TLoginPacketBuilder = class(TPacketBuilder)
private
FUserName: string;
FPassword: string;
protected
function GetPacketCount: Integer; override;
function GetPacket(Index: Integer): TByteDynArray; override;
public
constructor Create(const UserName, Password: string);
procedure Build; override;
end;

现在的问题在于该软件中有非常多种,这样就必须有大量的子类存在,如果以后软件升级将有更多的消息,类的数量也随之增加,不知有没有更好的方法来设计消息构造的类体系结构。

当然,对于简单的只是有一个命令字的消息可以通过一个类来实现,如:
TCommandPacketBuilder = class(TPacketBuilder)
private
FCommand: string;
protected
function GetPacketCount: Integer; override;
function GetPacket(Index: Integer): TByteDynArray; override;
public
constructor Create(const Command string);
procedure Build; override;
end;
 
这么久了都没有人回复,请问如何收回贴子?
 
你这样写不就可以了吗!
 
接受答案了.
 
可为经典的一篇呀
 
后退
顶部