以下枚举结构执行某些操作,同时对客户端类保持不可知(出于封装原因)
public enum MyEnum implements Commands{
A{
public int method1(int varY) {
return varY+2;
}
public MyEnum method2(){
return MyEnum.B;
}
//...other methods implementing Commands interface
},
B{
public int method1(int varX) {
return varX-2;
}
public MyEnum method2(){
return MyEnum.C;
}
//...other methods implementing Commands interface
},
C{
public int method1(int varY) {
return varY-2;
}
public MyEnum method2(){
return MyEnum.D;
}
//...other methods implementing Commands interface
},
D{
public int method1(int varX) {
return varX+2;
}
public MyEnum method2(){
return MyEnum.A;
}
//...other methods implementing Commands interface
}
客户端类
public class Client {
private int varX;
private int varY;
private MyEnum enum;
MyEnum getEnum(){
return enum;
}
int varX(){
return varX;
}
int getVarY(){
return varY;
}
public Client(int varX, int varY, MyEnum enum){
this.varX = varX;
this.varY = varY;
this.enum = enum;
}
public void performMethod1(MyEnum enum){
varX = getEnum().method1(getVarX()); //???
varY = getEnum().method1(getVarY()); //???
}
public void performMethod2(...){
enum = getEnum().method2();
}
}
我的问题是如何链接属于 MyEnum.A 和 MyEnum.C 的 method1() 的具体实现,以便它们对 Client 类成员 varY 进行操作,而 MyEnum.B 和 MyEnum.D 的 method1() 实现只能在客户端类成员变量 varX。
例如在 main() 方法中:
Client aClient = new Client(aVarX, aVarY, anEnum);
aClient.performMethod1(aClient.getEnum());
因此,根据当前的枚举状态,上述语句应仅对 varX 或 varY 进行操作,并更改 aClient 上的状态。
让我们说:
aClient.performMethod1(MyEnum.A);
由varY表示的aClient的状态应更改为varY+2。varX 应该保持不变。
从简单的命名约定可以看出,此时 MyEnum 中的 varX 并没有以任何方式链接到 Client 类中的 varX。我的想法倾向于变量的类型。由于我正在使用原语(int),因此无法区分..
您是否建议我在 Client 类中为每个 varX 和 varY 创建不同的自定义类型(以某种方式包装它们?)?
我希望我对这个问题不太冗长。如果我不清楚,请告诉我。非常感谢。