将标志传递给对象的正确设计模式

dje*_*lin 2 java oop design-patterns enum-flags

在 C 我做过这种事情

enum { USE_COKE = 1,
        USE_PEPSI = 2,
        USE_JUICE = 4,
        USE_WATER = 8 };

 int makeDrink(int flags);

 //...

 int rcode = makeDrink(USE_COKE | USE_JUICE | USE_WATER);
Run Code Online (Sandbox Code Playgroud)

我知道这是非常标准的,它也用于iostream例如。我想知道如何将这种设计模式翻译成 Java 或 OOP?我确定多态性不是这里的方法,因为我的代码有一个if(flag_is_set)块比重写大部分例程更好。是否有实用程序Flags类,或使用配置对象、一个enum或一堆整数等执行此操作的首选方法。

Bri*_*new 5

Java 有枚举。这是教程

我会在整数等上使用这些。这是一个类型安全的解决方案,并且由于枚举是对象,因此您可以附加行为并避免switch语句。

您可以使用EnumSet组合这些(如上所述)。从文档:

用于枚举类型的专用 Set 实现......这种表示非常紧凑和高效。这个类的空间和时间性能应该足够好,可以将其用作传统的基于 int 的“位标志”的高质量、类型安全的替代品。