在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);
我知道这是非常标准的,例如它也用在iostream
中。我想知道如何将这种设计模式转换为Java或OOP?我漂亮确定多态性不是这里的方法,因为我的代码更好地拥有if(flag_is_set)
块而不是重写大部分例程。是否有实用程序Flags
类,或使用配置对象,enum
或一堆整数等执行此操作的首选方法。
答案 0 :(得分:4)
Java有枚举。这是tutorial。
我会使用这些over int等。它是一种类型安全的解决方案,由于枚举是对象,因此您可以附加行为并避免使用switch
语句。
您可以使用EnumSet组合这些(如上所述)。来自doc:
与枚举类型一起使用的专用Set实现.... 表示非常紧凑和高效。空间和时间 这个类的性能应该足够好,以允许它作为一个 高品质,类型安全的替代传统的基于int的"位 标志"
答案 1 :(得分:0)
您还有Java EnumMap,因此您可以从饮料所需的所有EnumMap
USE_XXX
中获取价值,然后将其总和转换为您的方法
答案 2 :(得分:-1)
有多种方法可以实现这一点。