在下面的示例中,Enums执行类将执行的处理量。
enum TriggerHandlerType {
DASHBOARD {
@Override
TriggerHandler create() {
return new DashboardTriggerHandler();
}
},
COMPONENT_HANDLER {
//...
};
abstract TriggerHandler create();
}
private static TriggerContext getTriggerContext(TriggerHandlerType triggerHandlerType) throws TriggerHandlerException {
return new TriggerContext(triggerHandlerType.create());
}
枚举通常用于常量的类型安全存储,在这种情况下,它们将根据处理逻辑返回不同的值。在某种程度上,它似乎是一种综合技术,因为Enums在这里进行状态确定,这简化了类的处理。此外,由于返回值是有限值的子集,因此使Enums本身处理处理似乎有些意义。
我确实在这里看到问题,这会破坏 SOLID 中的打开 - 关闭原则,只要添加更多枚举,类就会增加代码行数,可以有人分享你对此的看法吗?
答案 0 :(得分:0)
真正的答案是:取决于为...定义的枚举。
你可以定义枚举,使你的API客户端不断实现一些功能作为语法糖......
一个很好的例子是java TimerUnit,其中每个常量都是可以用来计算时间转换的final类
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html#toHours(long)
其他枚举实现比较器接口并在其常量中实现已定义的排序标准..
所有这些都是有效的,因为是辛辣糖
答案 1 :(得分:0)
我有一个枚举,执行OR,AND,SEQ等操作。
使用java 8和一个overriden方法,您还可以创建一个带有功能接口的构造函数作为参数。
enum TriggerHandlerType {
DASHBOARD(() -> DashboardTriggerHandler::new)),
COMPONENT_HANDLER (() -> { ... });
private final Fun fun;
private TriggerHandlerType(Fun fun) {
this.fun = fun;
}
public TriggerHandler create() {
fun.apply();
}
}
在另一种情况下,我没有使用这种技术来解耦类,并且有明确的类层。 enum是一个尚未使用后期课程的早期课程。
从枚举映射到处理程序也是OO。单元测试可能会检查创建的地图的大小是否等于枚举值'。
我不必说,枚举是一种人工耦合。固定数量的元素与否,可以使单独的类/单例。
所以它取决于。