以下枚举结构执行某些操作,同时对客户端类保持不可知(由于封装原因)
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()的具体实现,以便它们能够对客户端类成员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);应将由aClient表示的varY状态更改为varY+2。varX应该保持不变。
从简单的命名约定可以看出,此时varX在MyEnum中没有以任何方式链接到客户端类中的varX。我的想法倾向于变量的类型。由于我使用的是原语(int),所以无法区分。
您会建议我为每个varX和varY创建不同的自定义类型(以某种方式包装它们吗?)在客户类?
我希望我在这个问题上不要过于冗长。如果我对此不清楚,请告诉我。非常感谢。
发布于 2009-09-09 05:31:19
根据Client的不同值,您希望在MyEnum上发生不同的事情。如果MyEnum必须与客户端无关,那么Client将不得不识别MyEnum的不同状态(Client.performMethod1中的一个开关),或者一个单独的处理器类将实现该逻辑。
https://stackoverflow.com/questions/1397388
复制相似问题