命令模式:首先我們要知道命令模式的基本定義:來自客戶端的請求傳入一個對象,從而使你可用不同的請求對客戶進行參數化。用於“行為請求者”與“行為實現者”解耦,可實現二者之間的松耦合,以便適應變化。分離變化與不變的因素。一般可以實現命令的執行和撤銷操作。
他的基本目的:能夠實現請求者的請求行為和實際的執行者的執行行為,兩者相互獨立,松耦合,非常適合多個命令的執行實現的擴展操作。
使用命令模式基本的優勢如下:
1,大大的降低了對象之間的耦合,使得client 和 ivoker之間相互獨立。
2,新的命令,可以很容易的添加擴展到系統中,而基本不用影響原來的命令的實現操作。
3,可以十分容易的設計實現一個組合命令,譬如,遙控器上的多個按鈕的組合命令。
4,能夠實現,調用同一個方法,卻可以實現執行不同的操作,取決於命令對象的參數化。
下面用基本的小例子來簡單實現下java的命令模式:
基本步驟:
1、創建命令接口,接口中包含excute方法,便於所有的命令對象實現統一的操作。
2、創建實際的命令對象,實現命令接口,實現excute方法。
3、創建接受者,實際動作的操作執行者。
4、創建client客戶端,注入命令對象,根據實際注入的命令對象,執行命令方法。
首先,建立Command接口:
public interface Command { /** * */ void excute(); }
然后建立命令對象:開燈的命令,包含有電燈的實體引用。
public class LightOnCommand implements Command { private Light light; public LightOnCommand(Light light) { this.light = light; } @Override public void excute() { light.turnOn(); } }
緊接着,建立light對象,接收者,電燈對象,包含有開燈的實際動作。
public class LightOnCommand implements Command { private Light light; public LightOnCommand(Light light) { this.light = light; } @Override public void excute() { light.turnOn(); } }
最后,簡單,編寫client的遙控器對象,測試的main方法也包含其中,簡單測試命令模式的正常實現:
注入命令對象的接口引用,實際的注入,要看實際注入的實現類,本測試,注入的開燈的實現命令對象。
public class Remote { private Command command; public Remote(Command command) { this.command = command; } public void keyPress() { command.excute(); } public static void main(String[] args) { Light light = new Light(); Command command = new LightOnCommand(light); new Remote(command).keyPress(); } }
測試接口,能夠正常的開燈。簡單的實現了遙控器的開燈命令模式。而且要增加關燈操作,也十分簡單,
只要增加關燈的命令對象,在實際的命令請求時候,注入關燈的命令對象,就能簡單的實現關燈操作。