我們繼續(xù)學(xué)習(xí)設(shè)計(jì)模式系列文章。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、井陘礦網(wǎng)絡(luò)推廣、成都小程序開發(fā)、井陘礦網(wǎng)絡(luò)營銷、井陘礦企業(yè)策劃、井陘礦品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供井陘礦建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com本篇要講的是命令模式,其實(shí)命令模式也比較好理解,沒有用到多高深的技術(shù),也不需要多復(fù)雜的抽象。只需要我們腦海里能有一個(gè)大概的原型,等我們遇見類似問題的時(shí)候我們能通過巧妙的方式來解決。我們做應(yīng)用層開發(fā)的大部分接觸的都是一些模式、框架、思想等等,不像搞低層開發(fā)的,他們研究的可能多數(shù)是一些技術(shù)實(shí)現(xiàn)的問題,而我們是學(xué)習(xí)實(shí)現(xiàn)的方法論。應(yīng)用層開發(fā)在技術(shù)的復(fù)雜程度上是有限的,在組合技術(shù)的實(shí)現(xiàn)上是復(fù)雜的。所以有一些.NET架構(gòu)師確實(shí)比較厲害,他們能很早的就料到會(huì)出現(xiàn)什么問題,他們有很強(qiáng)的架構(gòu)思想,對(duì)設(shè)計(jì)模式的掌握、對(duì)架構(gòu)設(shè)計(jì)思想、對(duì)敏捷、極限等等都有了解,將它們化為一體,才能設(shè)計(jì)出非常漂亮的開發(fā)架構(gòu)。[王清培版權(quán)所有,轉(zhuǎn)載請(qǐng)給出署名]
[NET架構(gòu)師也是我們每一個(gè)NET程序員夢(mèng)寐以求的歸屬,我們向著這個(gè)目標(biāo)努力吧。加油!]
命令模式:將調(diào)用封裝成命令對(duì)象,通過命令對(duì)象進(jìn)行調(diào)用,很好的消除調(diào)用者與被調(diào)用者之間的耦合。
這是我對(duì)命令模式的理解,定義有很多種,側(cè)重點(diǎn)不同,理解就行了。我們引入問題,帶著問題來學(xué)習(xí)模式能很好的“消化吸收”。
現(xiàn)在移動(dòng)終端越來越流行,IPAD、IPHONE、家用設(shè)備等等,這是計(jì)算機(jī)發(fā)展的一種趨勢(shì),更是人類生活質(zhì)量的重大提升,有了計(jì)算機(jī)所有的東西都是信息化、數(shù)字化、科技化,不用出門都能買東西,不用到家都能自動(dòng)打開熱水器燒水,不用動(dòng)手都能吃到飯??磥砦覀冞x擇軟件開發(fā)是沒錯(cuò)的,至少我們能改善自己的生活環(huán)境。
我們來改善一下我們自己的家庭環(huán)境,使用全數(shù)字化,用一個(gè)移動(dòng)終端來控制家里的所有的電子設(shè)備,比如微波爐、熱水器、電視機(jī)、冰箱等等。只要是智能設(shè)備我們都能控制。
[軟件是對(duì)硬件編程,使用軟件來編寫硬件處理邏輯]
我們假設(shè)這個(gè)終端設(shè)備叫做家庭設(shè)備控制中心,我們要開發(fā)一個(gè)這樣的設(shè)備來對(duì)所有的這些家用電器進(jìn)行控制,但是這些家用電子各種各樣,不管是從造型上還是內(nèi)部實(shí)現(xiàn)上都有千差萬別,想要用這個(gè)終端進(jìn)行統(tǒng)一的控制似乎不太容易。這個(gè)終端不是死的,家用電子可能會(huì)隨著時(shí)間的長久而損壞,當(dāng)我們更換新的家用電器時(shí),我們的終端要能一樣工作,只需要簡(jiǎn)單的配置一下就能控制新的電器。[王清培版權(quán)所有,轉(zhuǎn)載請(qǐng)給出署名]
所以這里引入了兩個(gè)問題,第一個(gè)是控制終端不能隨著家用電器的變化而改動(dòng),第二個(gè)是不可能每個(gè)家用電器都按照終端的規(guī)定進(jìn)行制造。我們需要有一種辦法來解決這矛盾的局面。救命稻草來了,我們可以運(yùn)用“命令模式”的思想來解決這種矛盾的局面。
我們先來看一個(gè)命令模式的大概流程圖。
1:
在這種情況下,調(diào)用者與被調(diào)用者都不需要改動(dòng),只需要在這兩者之間加上命令對(duì)象來傳達(dá)這種調(diào)用者吩咐的命令就行了。
家用終端可能有多個(gè)按鈕,每個(gè)按鈕控制不同的電器,我們只需要將上圖的原理帶入到終端中就行了。
2:
這樣就可以用一個(gè)遙控器來控制任意的電器設(shè)備了。我們來看看代碼是怎么實(shí)現(xiàn)的,當(dāng)然實(shí)現(xiàn)的方式有很多種,每種各有優(yōu)缺點(diǎn),本篇文章以入門為主。
電視機(jī)代碼:
- using
- using
- using
- namespace
- ///
- /// 電視機(jī)
- ///
- publicclass
- ///
- /// 模式是關(guān)閉的
- ///
- boolfalse
- ///
- /// 切換關(guān)閉、打開
- ///
- publicstring
- if
- false
- return"關(guān)閉電視機(jī)"
- else
- true
- return"打開電視機(jī)"
電視機(jī)命令對(duì)象代碼:
- using
- using
- using
- namespace
- ///
- /// 電視機(jī)命令對(duì)象
- ///
- publicclass
- ///
- /// 電視機(jī)對(duì)象
- ///
- privatenew
- #region CommandInterface 成員
- ///
- /// 執(zhí)行命令
- ///
- publicstring
- return
- #endregion
命令接口代碼:
- using
- using
- using
- namespace
- ///
- /// 命令接口
- ///
- publicinterface
- ///
- /// 執(zhí)行命令
- ///
- string
控制中心代碼:
- using
- using
- using
- namespace
- ///
- /// 控制中心
- ///
- publicstaticclass
- privatestatic
- publicstaticvoid
- publicstaticstring
- return
模擬代碼:
- using
- using
- using
- namespace
- class
- staticvoidstring
- new
總結(jié):命令模式就講完了,大概的理論就是在中間架設(shè)一個(gè)命令對(duì)象將調(diào)用者與被調(diào)用者分離開來,解決兩者之間的耦合。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。