命令模式,將一組行爲抽象爲對象,實現兩者之間的鬆耦合。這就是命令模式(Command Pattern)。設計模式
模型:微信
下面經過通俗的實例來了解一下命令模式。ide
既然命令,就拿「項目經理」-「開發人員」舉例吧,好比有個外包的項目須要開發,開發完成後甲方要求改一改某個功能。下面用代碼詳細說明一下:學習
1.首先定義一個抽象的Receiver,由於開發人員不止一我的this
public abstract class AbstractReceiver { //寫項目 public abstract void write(); //增刪改項目 public abstract void change(); //提交程序 public abstract void ubmit(); }
2.定義具體的Receiver,這裏假設有兩個開發人員spa
public class ReceiverA extends AbstractReceiver{ @Override public void write() { Log.d("qzs","寫代碼"); } @Override public void change() { Log.d("qzs","改需求"); } @Override public void submit() { Log.d("qzs","提交"); } }
public class ReceiverB extends AbstractReceiver { @Override public void write() { Log.d("qzs","寫代碼"); } @Override public void change() { Log.d("qzs","改需求"); } @Override public void submit() { Log.d("qzs","提交"); } }
3.定義Command,命令類,也就是剛纔說的甲方要求改一改某個功能的命令,假如此功能是開發人員A改:設計
public abstract class AbstractCommand { ReceiverA receiverA=new ReceiverA(); //開發人員A ReceiverB receiverB=new ReceiverB(); //開發人員B //執行 public abstract void excute(); }
public class ChangeFunctionCommand extends AbstractCommand { @Override public void excute() { receiverA.change(); receiverA.submit(); } }
4.定義Invoker類,也就是項目經理,負責安排調用code
public class Invoker { private AbstractCommand command; //設置命令 public void setCommand(AbstractCommand command) { this.command = command; } // 執行命令 public void Action(){ command.excute(); }
5.調用對象
//定義一個項目經理-張三 Invoker ZHANGSAN=new Invoker(); //定義修改功能的命令並執行 AbstractCommand command=new ChangeFunctionCommand(); ZHANGSAN.setCommand(command); ZHANGSAN.Action();
運行後:事務
1.優勢:
2.缺點:
使用命令模式可能會致使某些系統有過多的具體命令類。由於針對每個命令都須要設計一個具體命令類,所以某些系統可能須要大量具體命令類,這將影響命令模式的使用。
3.使用場景:
4.附加:
若是有人問了,撤銷的操做怎麼作,其實很簡單。在抽象的接收類中定義一個「撤銷」的方法。而後再定義一個撤銷Command來增長這個撤銷命令就行了。
本文學習參考了《設計模式之禪》以及網上信息...
另外能夠加入個人Android技術交流羣:458739310
你們能夠關注個人微信公衆號:「安卓乾貨鋪」一個有質量、有態度的公衆號!