oop Java方法实现依赖于参数值
考虑一种方法
public void doSomething(String actionID){
switch (actionID){
case "dance":
System.out.print("I'm dancing");
break;
case "sleep":
System.out.print("I'm sleeping");
break;
default:
System.out.print("I've no idea what I'm doing");
}
该方法的实现取决于参数的值。有没有更优雅的方式来实现这一点,或者有不同的设计模式来复制这种行为
# 1 楼答案
如果调用者通过传递不同的字符串来决定执行什么逻辑,那么为什么不让他们调用不同的方法呢
VS:
看起来你不必要地把所有的电话都转移到
doSomething
您可以提供从字符串到相应函数的静态映射:
这使得有很多开关箱的场景变得更干净
# 2 楼答案
引入一个接口,例如
将逻辑封装在不同的实现中
使用地图。例如
# 3 楼答案
下面是基于示例问题的命令模式的简单实现。我定义了一个包含两个方法的
AbstractCommand
抽象类。第一个方法createCommand()
根据输入字符串名实例化一个命令类。这就是如何委托字符串输入来创建正确类型的命令。第二种方法是doAction()
,它没有定义,稍后将由特定的具体命令类实现现在这个框架已经设置好了,您可以轻松地为原始问题中的各种类型的操作添加其他命令。例如,您可以创建一个
SleepCommand
类,该类将输出I'm sleeping
,或者执行任何您想要的操作