构建该对象的更好模式?
我正在构造具有如下数据结构
enum MetaType {
HUMAN(
new MetaTypeAttribute(AttributeType.BODY, 1, 6),
new MetaTypeAttribute(AttributeType.AGILITY, 1, 6),
new MetaTypeAttribute(AttributeType.REACTION, 1, 6)
),
ORK(
new MetaTypeAttribute(AttributeType.BODY, 4, 9),
new MetaTypeAttribute(AttributeType.AGILITY, 1, 6),
new MetaTypeAttribute(AttributeType.REACTION, 1, 6)
);
MetaType(MetaTypeAttribute body, MetaTypeAttribute agility, MetaTypeAttribute reaction) {
}
}
的 枚举值:每个 MetaType 指定一组固定的 MetaTypeAttributes,其中包含该属性的最小值和最大值。
我讨厌这种语法。它太长了,很难看,而且它并不能阻止我传入错误的 AttributeType(AttributeType 应与 MetaType 构造函数的参数顺序匹配;AttributeType.BODY > body 等)。我想要的是一个更好的模式来确保使用这种精确的方案构造对象。
这段代码是缩写的。实际上有 9 种 AttributeType。
有什么改进建议吗?
I am constructing enum values that have a data structure like the following:
enum MetaType {
HUMAN(
new MetaTypeAttribute(AttributeType.BODY, 1, 6),
new MetaTypeAttribute(AttributeType.AGILITY, 1, 6),
new MetaTypeAttribute(AttributeType.REACTION, 1, 6)
),
ORK(
new MetaTypeAttribute(AttributeType.BODY, 4, 9),
new MetaTypeAttribute(AttributeType.AGILITY, 1, 6),
new MetaTypeAttribute(AttributeType.REACTION, 1, 6)
);
MetaType(MetaTypeAttribute body, MetaTypeAttribute agility, MetaTypeAttribute reaction) {
}
}
So there is an enum of MetaTypes; each MetaType specifies a fixed set of MetaTypeAttributes, which consist of a min and max value for that attribute.
I hate this syntax. It's too long, it's ugly, and it doesn't prevent me from passing in the wrong AttributeType (the AttributeType should match up with the order of the arguments of MetaType's constructor; AttributeType.BODY > body, etc.). What I want is a better pattern for ensuring that an object is constructed with this exact scheme.
This code is abbreviated. In reality there are 9 AttributeTypes.
Any suggestions for improvement?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您考虑不同的属性类型,也许您应该真正将这些属性类型创建为类/子类而不是枚举。您将拥有 OOP 的所有优点来处理每种类型的行为(继承方法、方法重写……),并且它们是类型安全的。
您也应该考虑这样做,而不是元属性和元类型。
If you consider different attribute types, maybe you should really create those attribute types as classes/subclasses instead of enums. You will have all the advantages of OOP to handle the behavior of each type (inherited methods, method rewriting, ...) and they'll be type safe.
You should think about doing this instead of meta attributes and meta types too.