我正在使用一种通信标准(我无法控制),该标准定义了要在各种数据包中发送/接收的数据项。
每个项目都由自定义类型和类型相关信息定义。这些项目很少会改变。我希望能够将项目构造函数的范围限制在一个地方,并将那里的所有项目定义为public static
(类似于 enum)。
目前,我有一个类型的枚举和一个项目的类。
enum Type {TYPE_A, TYPE_B, ...}
public class Item {
public static Item ITEM_1 = new Item(TYPE_A, someNumber);
public static Item ITEM_2 = new Item(TYPE_B, someNumber, someMap);
public static Item ITEM_3 = new Item(TYPE_A, someNumber);
...
// Constructor for type A
private Item(Type type, int param1) {...}
// Constructor for type B
private Item(Type type, int param1, Map param2) {...}
...
// Type-dependent methods
public String decode(byte[] data) {
switch(this.type) {
case TYPE_A:
...
}
case TYPE_B:
...
}
...
}
}
这已经变得难以管理,我正在寻找更好的模式/结构。
我可以有一个抽象的 Item 类,以及每种类型的子类。使用这种设置,我不知道如何在一个地方定义所有项目而不公开所有构造函数。