我一直试图找到一种方法来从我的基类中标记几个方法,以便客户端类可以通过标记来调用它们.示例代码是:
public class Base {
public void method1(){
..change state of base class
}
public void method2(){
..change state of base class
}
public void method3(){
..change state of base class
}
}
Run Code Online (Sandbox Code Playgroud)
main()方法的客户端类将通过随机指令序列调用Base的每个方法:
public static void main(String[] args) {
String sequence = "ABCAABBBABACCACC"
Base aBase = new Base();
for (int i = 0; i < sequence.length(); i++){
char temp = sequence.charAt(i);
switch(temp){
case 'A':{aBase.method1(); break;}
case 'B':{aBase.method2(); break;}
case 'C':{aBase.method3(); break;} }
}
System.out.println(aBase.getState());
}
Run Code Online (Sandbox Code Playgroud)
现在我希望从Client对象中完全摆脱switch语句.我知道通过多态替换switch的技术,但是想避免创建一组新类.我希望简单地将这些方法存储在适当的数据结构中,并以某种方式用序列中的匹配字符标记它们.
地图可以轻松地存储具有值/键对的对象,这些对象可以完成工作(如我在 …
我正在重构我现有的代码.它实际上工作正常,但它有点混乱,多个if-else条件检查一个变量的值,并将第二个变量的值更改为从固定枚举结构中获取的更新值.
else if (var1 == 'valueX')
{
if (var2 == MyEnum.A)
var2 = MyEnum.B;
else if (var2 == MyEnum.B)
var2 = MyEnum.C;
else if (var2 == MyEnum.C)
var2 = MyEnum.D;
else if (var2 == MyEnum.D)
var2 = MyEnum.A;
}
else if (....)
{
..similar block of conditionals
}
Run Code Online (Sandbox Code Playgroud)
关于重构和清理这段代码的最佳方法,我有点困惑.你会建议使用开关吗?还是更优雅的东西?
提前致谢!