在此解決方案中,您強制對象自己提供命令。這允許隱藏物體的內部。這些命令全部來源於Command
。
@FunctionalInterface
public interface Command { public void execute(); }
例如CommandA
。
public interface CommandA extends Command { }
應該使用此框架的對象應該實現Commandable
。該接口爲每個受支持的命令提供了一個方法,並允許對象返回其給定命令的特定實現。
public interface Commandable { public CommandA getCommandA(); }
以如下方式使用它。
public class Type implements Commandable {
private boolean isRunning = false;
public CommandA getCommandA() {
return() -> {isRunning = true;};
}
public boolean isRunning() {
return isRunning;
}
public static void main(String[] args) {
Type type = new Type();
System.out.println(type.isRunning());
Commandable object = type;
CommandA command = object.getCommandA();
command.execute();
System.out.println(type.isRunning());
}
}
輸出是
false
true
另外,如果你不希望對象來實現Commandable
,您可以創建某種命令的註冊表,並迫使每一個對象註冊該實施(它支持)的命令。
如果你提供一個[mcve]而不是僅僅描述問題,那麼它會更容易幫助你。 –
當一個設計人員無法工作時,一個最小的,完整的和可驗證的例子都很好。甚至連一個設計都沒有的時候,它是不太實際的!所以感謝下面的dasblinkenlight,以便發現我需要的模式。 – digitig