在軟體系統中,「行為請求者」與「行為實現者」通常呈現一種“緊密耦合”。但在某些場合,例如要對行為進行「記錄、撤銷/重做、事務」等處理,這種無法抵禦變化的緊密耦合是不合適的。在這種情況下,如何將「行為請求者」與「行為實現者」解耦?將一組行為抽象化為物件,實作二者之間的鬆散耦合。這就是命令模式(Command Pattern)
類別圖
public interface ICommand { void execute(); }
public class ConcreteCommand implements ICommand { private Receiver receiver; public ConcreteCommand(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { this.receiver.action(); } }
public class Receiver { public void action() { System.out.println("receiver do something"); } }
public class Invoker { private ICommand command; public Invoker(ICommand command) { this.command = command; } public void invoke() { this.command.execute(); } }
/* * 命令(Command)模式 * 请求与执行 分离 * 可以多个命令接口的实现类,隐藏真实的被调用方 */ public class Test { public static void main(String[] args) { Receiver receiver = new Receiver();//真正的执行者 ICommand command = new ConcreteCommand(receiver);//具体命令 Invoker invoker = new Invoker(command );//调用者 invoker.invoke(); } }
以上是Java實作指令(Command)模式的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!