【发布时间】:2016-10-28 20:09:05
【问题描述】:
我正在尝试根据到达我的字符串参数运行一些方法。 这个想法是从“终端”列表中激活和停用某些功能。 该类是为命令模式设计的,“doProcess”将在一段时间内被调用
我的实际解决方案很糟糕,所以我考虑制作一个 HashMap。例如: map.put("邮件",activateMailsOfTerminals)
但我不知道如何根据构造函数上的字符串列表动态调用函数(activateMailsOfTerminals、deactivate...)
非常感谢!
糟糕的解决方案:
public class ActionsActivator {
Set < Terminal > terminals = new HashSet < > ();
Set < String > activate = new HashSet < > ();
Set < String > deactivate = new HashSet < > ();
public ActionsActivator(Set < Terminal > filteredTerminals, Set < String > active, Set < String > deactive) {
this.terminals = Map().getInstance().getTerminals;
this.activate.addAll(activate);
this.deactivate.addAll(deactivate);
}
public void doProcess() {
if (hasElement(activate, "Mail")) terminals.forEach(terminal - > terminal.activateMails());
if (hasElement(activate, "Register")) terminals.forEach(terminal - > terminal.activateRegisters());
if (hasElement(deactivate, "Mail")) terminals.forEach(terminal - > terminal.deactivateMails());
if (hasElement(deactivate, "Register")) terminals.forEach(terminal - > terminal.deactivateRegisters());
}
private Boolean hasElement(Set < String > list, String element) {
return list.stream().anyMatch(elem - > elem.equals(element));
}
}
【问题讨论】:
-
因此,您当前的解决方案对方法
activateMails()和activateRegiters()的调用进行了硬编码。我是否正确理解您希望能够将这些函数传递给构造函数? -
不一定,我只是不想检查字符串(hasElement 和 ifs)。最好的方法是只使用字符串参数列表调用方法
标签: java hashmap command-pattern