設計模式-行為型軟體設計模式(三)
阿新 • • 發佈:2019-02-18
命令模式
簡介
命令模式的目的是解除呼叫者和接受者之間的耦合。命令模式為相應客戶請求的行動建立一個抽象,也就是設計一個命令介面類,用於宣告一個共同的介面。該介面有一些具體的實現類,每個實現類代表一個不同型別的客戶請求和相應的處理。
(1)客戶類建立必要的接收器(Receiver)物件。
(2)客戶類建立一個適當的命令(Command)物件並且將在步驟(1)建立的接收器物件配置給它。
(3)客戶類建立Invoker物件,並且將在步驟(2)中建立的命令物件配置給它。
(4)Invoker物件呼叫命令物件的execute()方法。
示例
控制空調開關和電燈開關 class Invoker { private Command command; public Invoker(Command command){this.command = command;} void callCommand(){command.execute();} } public interface Command { public abstract void execute(); } public class AirConditionOnCommand implements Command { private AirCondition ac; public setAc(AirCondition ac){...} public void execute() { ac.On(); } } public class AirConditionOffCommand implements Command { private AirCondition ac; public setAc(AirCondition ac){...} public void execute() { ac.Off(); } } public class LampOnCommand implements Command { private Lamp ac; public setAc(Lamp ac){...} public void execute() { ac.On(); } } public class LampOffCommand implements Command { private Lamp ac; public setAc(Lamp ac){...} public void execute() { ac.Off(); } } 接受類 class AirCondition { public void On(){} public void Off(){} } class Lamp { public void On(){} public void Off(){} } 呼叫 Lamp l = new Lamp(); LampOnCommand lo = new LampOnCommand(); lo.setAc(l); Invoker invoker1 = new Invoker(lo); invoker1.callCommand();
優點
(1)命令模式可以實現呼叫者和被呼叫者之間的解耦。
(2)命令模式容易擴充套件,上面的程式如果新增控制電視的開關的話,只要新增一個電視的接受類以及一個電視的控制類實體。
(3)命令模式支援將多個命令裝配成一個複合命令,複合命令實際上市組合模式的一個例項。
(4)命令模式支援操作的取消與重做。需要對ConcreteCommand進行新增一些狀態。