我們繼續(xù)學(xué)習(xí)設(shè)計(jì)模式系列文章。
在監(jiān)利等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站制作,監(jiān)利網(wǎng)站建設(shè)費(fèi)用合理。
本篇要講的是命令模式,其實(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)思想,對設(shè)計(jì)模式的掌握、對架構(gòu)設(shè)計(jì)思想、對敏捷、極限等等都有了解,將它們化為一體,才能設(shè)計(jì)出非常漂亮的開發(fā)架構(gòu)。[王清培版權(quán)所有,轉(zhuǎn)載請給出署名]
[NET架構(gòu)師也是我們每一個(gè)NET程序員夢寐以求的歸屬,我們向著這個(gè)目標(biāo)努力吧。加油!]
命令模式:將調(diào)用封裝成命令對象,通過命令對象進(jìn)行調(diào)用,很好的消除調(diào)用者與被調(diào)用者之間的耦合。
這是我對命令模式的理解,定義有很多種,側(cè)重點(diǎn)不同,理解就行了。我們引入問題,帶著問題來學(xué)習(xí)模式能很好的“消化吸收”。
現(xiàn)在移動(dòng)終端越來越流行,IPAD、IPHONE、家用設(shè)備等等,這是計(jì)算機(jī)發(fā)展的一種趨勢,更是人類生活質(zhì)量的重大提升,有了計(jì)算機(jī)所有的東西都是信息化、數(shù)字化、科技化,不用出門都能買東西,不用到家都能自動(dòng)打開熱水器燒水,不用動(dòng)手都能吃到飯??磥砦覀冞x擇軟件開發(fā)是沒錯(cuò)的,至少我們能改善自己的生活環(huán)境。
我們來改善一下我們自己的家庭環(huán)境,使用全數(shù)字化,用一個(gè)移動(dòng)終端來控制家里的所有的電子設(shè)備,比如微波爐、熱水器、電視機(jī)、冰箱等等。只要是智能設(shè)備我們都能控制。
[軟件是對硬件編程,使用軟件來編寫硬件處理邏輯]
我們假設(shè)這個(gè)終端設(shè)備叫做家庭設(shè)備控制中心,我們要開發(fā)一個(gè)這樣的設(shè)備來對所有的這些家用電器進(jìn)行控制,但是這些家用電子各種各樣,不管是從造型上還是內(nèi)部實(shí)現(xiàn)上都有千差萬別,想要用這個(gè)終端進(jìn)行統(tǒng)一的控制似乎不太容易。這個(gè)終端不是死的,家用電子可能會(huì)隨著時(shí)間的長久而損壞,當(dāng)我們更換新的家用電器時(shí),我們的終端要能一樣工作,只需要簡單的配置一下就能控制新的電器。[王清培版權(quán)所有,轉(zhuǎn)載請給出署名]
所以這里引入了兩個(gè)問題,第一個(gè)是控制終端不能隨著家用電器的變化而改動(dòng),第二個(gè)是不可能每個(gè)家用電器都按照終端的規(guī)定進(jìn)行制造。我們需要有一種辦法來解決這矛盾的局面。救命稻草來了,我們可以運(yùn)用“命令模式”的思想來解決這種矛盾的局面。
我們先來看一個(gè)命令模式的大概流程圖。
1:
在這種情況下,調(diào)用者與被調(diào)用者都不需要改動(dòng),只需要在這兩者之間加上命令對象來傳達(dá)這種調(diào)用者吩咐的命令就行了。
家用終端可能有多個(gè)按鈕,每個(gè)按鈕控制不同的電器,我們只需要將上圖的原理帶入到終端中就行了。
2:
這樣就可以用一個(gè)遙控器來控制任意的電器設(shè)備了。我們來看看代碼是怎么實(shí)現(xiàn)的,當(dāng)然實(shí)現(xiàn)的方式有很多種,每種各有優(yōu)缺點(diǎn),本篇文章以入門為主。
電視機(jī)代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- ///
- /// 電視機(jī)
- ///
- public class Television
- {
- ///
- /// 模式是關(guān)閉的
- ///
- bool isopen = false;
- ///
- /// 切換關(guān)閉、打開
- ///
- public string Switch()
- {
- if (isopen)
- {
- isopen = false;
- return "關(guān)閉電視機(jī)";
- }
- else
- {
- isopen = true;
- return "打開電視機(jī)";
- }
- }
- }
- }
電視機(jī)命令對象代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- ///
- /// 電視機(jī)命令對象
- ///
- public class TeleisionCommand : CommandInterface
- {
- ///
- /// 電視機(jī)對象
- ///
- private Television Tv = new Television();
- #region CommandInterface 成員
- ///
- /// 執(zhí)行命令
- ///
- public string Execute()
- {
- return Tv.Switch();
- }
- #endregion
- }
- }
命令接口代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- ///
- /// 命令接口
- ///
- public interface CommandInterface
- {
- ///
- /// 執(zhí)行命令
- ///
- string Execute();
- }
- }
控制中心代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- ///
- /// 控制中心
- ///
- public static class ControlContent
- {
- private static CommandInterface Command;
- public static void SetControlObjectCommand(CommandInterface cobject)
- {
- Command = cobject;
- }
- public static string ExecuteControlObject()
- {
- return Command.Execute();
- }
- }
- }
模擬代碼:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- TeleisionCommand tvcommand = new TeleisionCommand();
- ControlContent.SetControlObjectCommand(tvcommand);
- Console.WriteLine(ControlContent.ExecuteControlObject());
- Console.ReadLine();
- }
- }
- }
總結(jié):命令模式就講完了,大概的理論就是在中間架設(shè)一個(gè)命令對象將調(diào)用者與被調(diào)用者分離開來,解決兩者之間的耦合。