同時保持不可知的客戶端類(用於封裝的原因)從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