<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 一、開篇 上一篇我們講述了結構型模式中的代理模式。本篇,我們將會開始講述行為型模式中的命令模式,在設計模式的這些基本的模式完成后,我將會將一些經常用的其他的一些擴展的模式進行講解,希望能夠引起大家的共鳴。 我們先來看看命令模式的定義吧: 命令模式是將一類對象的功能操作進行抽象,一般來說,這些對象有相同的方法,所以這類對象有著類似的操作,我們通過抽象,就可以定義出一個命令對象,通過這樣的方式,用戶程序在使用的時候,只與該命令對象打交道,而不用與一類對象打交道,降低了耦合性,提高了程序設計的靈活性。 命令模式適應于一組對象他們的操作形式非常的類似,這個時候我們可以把對象的行為進行抽象,抽象成命令對象,實現解耦,下面來舉例說明: 例如我這里要實現多數據的保存操作,例如支持SQLServer與Oracle數據庫,還有Access數據庫,那么假設我這里定義相關的CRUD方法如下: [![image](https://box.kancloud.cn/2016-05-16_573996b6afc25.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261526529321.png) 對于上述的方法,可能我們為每個數據庫定義了自己的相應的數據庫操作命令方法,例如我們都定義為Create方法,Update方法,Delete方法, Retrieve方法(查詢數據)。 那么我們可以抽象出一個公共的命令對象,定義這樣的命令抽象對象: [![image](https://box.kancloud.cn/2016-05-16_573996b6cee65.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261526585662.png) 本篇以此為題目展開,來講述命令模式的完整實現,可能功能還不是很完善,但是希望大家能夠看出命令模式解決的問題及解決問題的思路,如果我某個地方表述有誤或者說表達的不清楚,請大家指出批評,并謝謝大家的意見和建議。 ### 二、摘要 本篇將以多數據訪問支持來題目來講述命令模式的用法,可能部分功能沒有講到或者提到,還請大家補充,由于本文都是個人對命令模式的理解,可能部分觀點還存在理解上的偏差,或者不深入,還請大家批評指出。 本文將從下面的幾個內容展開說明: 1、命令模式的使用場景 2、命令模式的經典實現。 3、命令模式的其他應用。 4、總結命令模式。? 我們看看經典的命令模式的類圖吧,對比下經典命令模式的,我們下面給出命令模式的其他應用場景。 [![cf59c6de57f78257ccbf1ab1](https://box.kancloud.cn/2016-05-16_573996b6e4a42.jpg "cf59c6de57f78257ccbf1ab1")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261527054130.jpg) ### 三、本文大綱 a、開篇。 b、摘要。 c、本文大綱。 d、命令模式的特點及使用場景。 e、命令模式的其他方案。 f、命令模式使用總結。 g、系列進度。 h、下篇預告。 ### 四、命令模式的特點及使用場景 我們來分析下命令模式的使用場景吧,一般情況下如下幾類場景中使用命令模式會達到很好的效果: 1、當一個應用程序調用者與多個目標對象之間存在調用關系時,并且目標對象之間的操作很類似的時候。 2、例如當一個目標對象內部的方法調用太復雜,或者內部的方法需要協作才能完成對象的某個特點操作時。 3、有時候調用者調用目標對象后,需要回調一些方法。 對于上圖中的靜態對象,我們來進行解釋下,并且我們必須深入理解這幾個對象的含義。 Invoker:調用者對象。 Receiver:接收調用者請求執行操作的目標對象。 ICommand:用于解耦目標對象與調用者之間的抽象命令對象。 下面我們來分析下上面講述的CRUD的經典命令模式的實現: 1、定義SQLServer的CRUD的簡單實現示例代碼: [![image](https://box.kancloud.cn/2016-05-16_573996b704ae3.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/20110226152709113.png) [![image](https://box.kancloud.cn/2016-05-16_573996b72a670.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261527218235.png) [![image](https://box.kancloud.cn/2016-05-16_573996b742f0f.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261527317702.png) [![image](https://box.kancloud.cn/2016-05-16_573996b766206.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261527464198.png) 這里補上DO方法: [![image](https://box.kancloud.cn/2016-05-16_573996b78d479.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102270842345198.png) 2、CRUD的ICommand接口定義: [![image](https://box.kancloud.cn/2016-05-16_573996b7aa087.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261527525490.png) [![image](https://box.kancloud.cn/2016-05-16_573996b7bfb29.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261527585103.png) 我們這里定義的Receiver定義成枚舉類型的對象,來枚舉SQLserver執行的具體的操作。 3、下面給出命令對象的基本實現: [![image](https://box.kancloud.cn/2016-05-16_573996b7dcad2.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261528065706.png) 4、具體的命令對象的實現: [![image](https://box.kancloud.cn/2016-05-16_573996b80136a.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261528143702.png) 5、調用者代碼 [![image](https://box.kancloud.cn/2016-05-16_573996b816df1.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261528369090.png) 6、測試代碼: [![image](https://box.kancloud.cn/2016-05-16_573996b835358.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261528541701.png) 通過上面我們給出了命令模式的一個經典的實現方案。下面我們來看看其他的解決方案。在實際的項目中,可能我們很少會設置上面的Receiver對象的,也很少把他作為command的一個屬性放在接口中。我們更習慣將Receiver對象作為ICommand中通用接口方法的一個變量傳入給目標對象。當然不同的場景決定了不同的模式用法。通過經典的方案,我們能夠看出命令模式的用法。 ### 五、命令模式的其他實現方案 一、輕量級的事件隊列 考慮如下場景,如果我們可能在某個調用者在執行一個動作時,我們不想調用者了解那么多的細節和內部的交互,并且調用者的這個方法調用了很多目標對象的不同方法,來協作完成一些操作。這些目標對象的方法要么順序有限制,要么無順序的限制等。 1、創建3個類,每個類都有自身的成員方法輸出一段字符串 [![image](https://box.kancloud.cn/2016-05-16_573996b84ca8f.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261529027221.png) 2、定義一個委托 [![image](https://box.kancloud.cn/2016-05-16_573996b862365.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261529261921.png) 3、定義調用者 [![image](https://box.kancloud.cn/2016-05-16_573996f473c68.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261529387602.png) 4、測試代碼 [![image](https://box.kancloud.cn/2016-05-16_573996f4978a7.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261532385659.png) 5、輸出結果: [![image](https://box.kancloud.cn/2016-05-16_573996f4b009d.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261532527794.png) 二、異步命令 考慮現實我們在開發的過程中經常會遇到這樣的場景吧:我們需要執行一個時間特別長的任務,如果我們將這個長任務與其他的任務一起采用同步執行的方式,客戶的體驗不好,例如我們在下載的時候,如果我們能做到異步的方式的話,后臺執行文件下載的操作,前臺用戶可以繼續執行其他的操作,而不是等待下載完畢,才能繼續操作。這個時候,我們可能通過異步命令的方式來操作,效果肯定會更好。不然也不會出現那么多的異步編程的思想了。 下面我們通過命令模式來實現異步命令模式: 1、? 定義命令抽象接口 [![image](https://box.kancloud.cn/2016-05-16_573996f4c9676.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261533007492.png) 2、定義異步命令接口 [![image](https://box.kancloud.cn/2016-05-16_573996f4ddeb4.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261533152037.png) 3、異步命令抽象的實現 [![image](https://box.kancloud.cn/2016-05-16_573996f50699d.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261533215313.png) [![image](https://box.kancloud.cn/2016-05-16_573996f525911.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261533283441.png) 上面給出了異步的調用方式,通過上面的這樣的代碼形式,就能完成異步的訪問 4、實體的內容 [![image](https://box.kancloud.cn/2016-05-16_573996f536a06.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102261533343370.png) 上面實體的內容可以改進成為,通過統一添加的方式來注冊事件 具體的調用方式如下: [![image](https://box.kancloud.cn/2016-05-16_573996f550527.png "image")](http://images.cnblogs.com/cnblogs_com/hegezhou_hot/201102/201102270842371488.png) ### 六、命令模式使用總結 通過上面的講解我想大家應該對命令模式有了一定的了解,命令模式就是將一組對象的相似行為,進行了抽象,將調用者與被調用者之間進行解耦,提高了應用的靈活性。命令模式將調用的目標對象的一些異構性給封裝起來,通過統一的方式來為調用者提供服務。 相信大家通過實戰能夠體會該模式的好處。 ### 七、系列進度 創建型 1、[設計模式系列-單件模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/10/02/1841390.html) 2、[設計模式系列-工廠模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/11/30/1892227.html#1973367) 3、設計模式系列[-抽象工廠模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/01/1893388.html) 4、設計模式系列[-創建者模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/02/1894771.html) 5、設計模式系列[-原型模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/04/1896471.html) 結構型 1、[設計模式系列-組合模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/06/1898161.html#commentform) 2、[設計模式系列-外觀模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/06/1897398.html) 3、[設計模式系列-適配器模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/09/1901040.html) 4、[設計模式系列-橋模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/10/1902185.html) 5、[設計模式系列-裝飾模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/11/1903392.html) 6、[設計模式系列-享元模式](http://www.cnblogs.com/hegezhou_hot/archive/2010/12/12/1903728.html) 7、[設計模式系列-代理模式](http://www.cnblogs.com/hegezhou_hot/archive/2011/02/20/1958965.html) 行為型 1、設計模式系列-命令模式 2、設計模式系列-觀察者模式 3、設計模式系列-策略模式 4、設計模式系列-職責模式 5、設計模式系列-模板模式 6、設計模式系列-中介者模式 7、設計模式系列-解釋器模式 ### 八、下篇預告 下一篇我將會講解設計模式中的經典模式,觀察者模式,該模式是委托應用的經典代表,不熟悉委托的話,可能就會很好理解該模式。希望大家提出寶貴意見,我將會不斷的改進寫作的水平,希望與大家共同交流和進步。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看