1.命令模式概述
所謂的命令就是如:將軍命令士兵進攻值漫,老師命令學(xué)生上課要坐好乡数,我們可以將命令這個過程進行解析炼绘。一個是發(fā)起命令的人嗅战,稱為發(fā)送者,
一個稱謂收到命令的人稱為接收者俺亮,還有一個為命令本身驮捍,稱為傳遞者。
2.命令模式的實現(xiàn)
拿我們生活中最接近的事例開關(guān)與電燈為例脚曾。當我們按下開關(guān)东且,燈會根據(jù)開關(guān)變暗或變亮。我們先按一開始我們最能想到的方式進行編寫本讥。
首先一個開關(guān)類和一個燈光類苇倡。如下圖所示:
為燈光類抽象出一個電器富纸,電器都有開和關(guān)的操作,開關(guān)關(guān)聯(lián)電燈旨椒,用戶操作電燈就會改變電燈的狀態(tài)晓褪。
如果按照最普通的方法進行設(shè)計的話,開關(guān)與燈光會強耦合在一起不利于進行擴展综慎,我們的電器不只燈光涣仿,開關(guān)也遠不知有開關(guān)功能,當我們引入
電視示惊、空調(diào)等好港。就得修改原有的類,新增電視米罚、空調(diào)強耦合在開關(guān)類里面钧汹,并且開關(guān)得不停的新增新的方法,這樣不停的修改也會隱藏更多的bug录择。
我們?nèi)绾螌⑺麄兊鸟詈线M行分離拔莱?這就引入了我們的命令模式。
1.將開關(guān)當作發(fā)送者隘竭,將燈光塘秦、電視當作接收者。
2.我們將引入一個中間類叫做命令類动看。將發(fā)送的指令當成一個命令尊剔。讓命令告訴給接收者要去做什么,接收者收到后做出對應(yīng)的反應(yīng)菱皆。
3.我們對這些類進行抽象须误。
這就是我們抽象出來的一個UML類圖。接下去我們看看對應(yīng)具體類是如何編寫的仇轻。
這樣的話我們就把發(fā)送者和接收者分離開來霹期,發(fā)送者只管發(fā)送不用關(guān)心發(fā)送給誰,接收者只管收到消息要要去做什么操作拯田。
我們現(xiàn)在有遙控器 有電視历造,遙控器上開關(guān)電視的按鈕和調(diào)節(jié)音量的按鈕,如果我們要對其進行擴展船庇,新增一個調(diào)節(jié)頻道的按鈕吭产,我們只需新增一個調(diào)節(jié)頻道的命令類,在遙控器上多2個按鈕即可,讓調(diào)節(jié)頻道命令類去通知電視該換頻道了鸭轮。
命令模式的缺點也是顯而易見的臣淤,就是如果隨著遙控器功能不斷的強大,需要的命令就會越來越多窃爷,命令類就會創(chuàng)建很多邑蒋,這是無法避免的姓蜂。