同时保持不可知的客户端类(用于封装的原因)从Enum客户端类的成员变量联方法
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前提操作或改变并且更改aClient的状态。
我们先来说说:
aClient.performMethod1(MyEnum.A);
aClient由代表的状态变化应改为变化+ 2。 varX应该保持不变。
正如您通过简单的命名约定所看到的,此时MyEnum中的varX没有以任何方式链接到Client类中的varX。我的想法倾向于变量的类型。由于我正在使用基元(int),因此无法区分。
您会推荐我在客户端类中为每个varX和varY创建不同的自定义类型吗?
我希望我对问题不要太冗长。如果我不清楚,请告诉我。非常感谢。
在“performMethod1(...)”中,您使用“getEnum()。method1(...)”,因此它的方法1的客户端的枚举不是“enum”参数。 我不确定是否要使用参数“枚举”做method1或什么?请进一步澄清。 – NawaMan 2009-09-09 03:32:59
是的,客户端只是委托MyEnum类中的不同枚举来执行方法逻辑。 但是由于MyEnum也是客户端的成员变量,所以为了改变客户端的状态,我需要将MyEnum传递给其他方法,如method2()。这是否更清楚?感谢您的评论 – denchr 2009-09-09 11:10:39
我更新了MyEnum和客户端代码,以显示客户端委托给MyEnum并保存该客户端属性的枚举状态并更改其状态。 - 目标是对varX,varY客户端成员做同样的事情 – denchr 2009-09-09 11:25:27