天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—命令模式

  一、開篇

      上一篇我們講述了結(jié)構(gòu)型模式中的代理模式。本篇,我們將會(huì)開始講述行為型模式中的命令模式,在設(shè)計(jì)模式的這些基本的模式完成后,我將會(huì)將一些經(jīng)常用的其他的一些擴(kuò)展的模式進(jìn)行講解,希望能夠引起大家的共鳴。

      我們先來(lái)看看命令模式的定義吧:

      命令模式是將一類對(duì)象的功能操作進(jìn)行抽象,一般來(lái)說(shuō),這些對(duì)象有相同的方法,所以這類對(duì)象有著類似的操作,我們通過抽象,就可以定義出一個(gè)命令對(duì)象,通過這樣的方式,用戶程序在使用的時(shí)候,只與該命令對(duì)象打交道,而不用與一類對(duì)象打交道,降低了耦合性,提高了程序設(shè)計(jì)的靈活性。

      命令模式適應(yīng)于一組對(duì)象他們的操作形式非常的類似,這個(gè)時(shí)候我們可以把對(duì)象的行為進(jìn)行抽象,抽象成命令對(duì)象,實(shí)現(xiàn)解耦,下面來(lái)舉例說(shuō)明:

      例如我這里要實(shí)現(xiàn)多數(shù)據(jù)的保存操作,例如支持SQLServer與Oracle數(shù)據(jù)庫(kù),還有Access數(shù)據(jù)庫(kù),那么假設(shè)我這里定義相關(guān)的CRUD方法如下:      image

      對(duì)于上述的方法,可能我們?yōu)槊總€(gè)數(shù)據(jù)庫(kù)定義了自己的相應(yīng)的數(shù)據(jù)庫(kù)操作命令方法,例如我們都定義為Create方法,Update方法,Delete方法,Retrieve方法(查詢數(shù)據(jù))。

      那么我們可以抽象出一個(gè)公共的命令對(duì)象,定義這樣的命令抽象對(duì)象:      image

      本篇以此為題目展開,來(lái)講述命令模式的完整實(shí)現(xiàn),可能功能還不是很完善,但是希望大家能夠看出命令模式解決的問題及解決問題的思路,如果我某個(gè)地方表述有誤或者說(shuō)表達(dá)的不清楚,請(qǐng)大家指出批評(píng),并謝謝大家的意見和建議。

  二、摘要

      本篇將以多數(shù)據(jù)訪問支持來(lái)題目來(lái)講述命令模式的用法,可能部分功能沒有講到或者提到,還請(qǐng)大家補(bǔ)充,由于本文都是個(gè)人對(duì)命令模式的理解,可能部分觀點(diǎn)還存在理解上的偏差,或者不深入,還請(qǐng)大家批評(píng)指出。

      本文將從下面的幾個(gè)內(nèi)容展開說(shuō)明:

      1、命令模式的使用場(chǎng)景

      2、命令模式的經(jīng)典實(shí)現(xiàn)。

      3、命令模式的其他應(yīng)用

      4、總結(jié)命令模式。 

      我們看看經(jīng)典的命令模式的類圖吧,對(duì)比下經(jīng)典命令模式的,我們下面給出命令模式的其他應(yīng)用場(chǎng)景。      cf59c6de57f78257ccbf1ab1

  三、本文大綱

       a、開篇。

       b、摘要。

       c、本文大綱。

       d、命令模式的特點(diǎn)及使用場(chǎng)景。

       e、命令模式的其他方案。

       f、命令模式使用總結(jié)。

       g、系列進(jìn)度。

       h、下篇預(yù)告。

  四、命令模式的特點(diǎn)及使用場(chǎng)景

      我們來(lái)分析下命令模式的使用場(chǎng)景吧,一般情況下如下幾類場(chǎng)景中使用命令模式會(huì)達(dá)到很好的效果:

      1、當(dāng)一個(gè)應(yīng)用程序調(diào)用者與多個(gè)目標(biāo)對(duì)象之間存在調(diào)用關(guān)系時(shí),并且目標(biāo)對(duì)象之間的操作很類似的時(shí)候。

      2、例如當(dāng)一個(gè)目標(biāo)對(duì)象內(nèi)部的方法調(diào)用太復(fù)雜,或者內(nèi)部的方法需要協(xié)作才能完成對(duì)象的某個(gè)特點(diǎn)操作時(shí)。

      3、有時(shí)候調(diào)用者調(diào)用目標(biāo)對(duì)象后,需要回調(diào)一些方法。

      對(duì)于上圖中的靜態(tài)對(duì)象,我們來(lái)進(jìn)行解釋下,并且我們必須深入理解這幾個(gè)對(duì)象的含義。

      Invoker:調(diào)用者對(duì)象。

      Receiver:接收調(diào)用者請(qǐng)求執(zhí)行操作的目標(biāo)對(duì)象。

      ICommand:用于解耦目標(biāo)對(duì)象與調(diào)用者之間的抽象命令對(duì)象。

      下面我們來(lái)分析下上面講述的CRUD的經(jīng)典命令模式的實(shí)現(xiàn):

      1、定義SQLServer的CRUD的簡(jiǎn)單實(shí)現(xiàn)示例代碼:      image

image

      這里補(bǔ)上DO方法:

image

      2、CRUD的ICommand接口定義:

image

image

      我們這里定義的Receiver定義成枚舉類型的對(duì)象,來(lái)枚舉SQLserver執(zhí)行的具體的操作。

      3、下面給出命令對(duì)象的基本實(shí)現(xiàn):      image

      4、具體的命令對(duì)象的實(shí)現(xiàn):      image

      5、調(diào)用者代碼:      image

      6、測(cè)試代碼:      image

     通過上面我們給出了命令模式的一個(gè)經(jīng)典的實(shí)現(xiàn)方案。下面我們來(lái)看看其他的解決方案。在實(shí)際的項(xiàng)目中,可能我們很少會(huì)設(shè)置上面的Receiver對(duì)象的,也很少把他作為command的一個(gè)屬性放在接口中。我們更習(xí)慣將Receiver對(duì)象作為ICommand中通用接口方法的一個(gè)變量傳入給目標(biāo)對(duì)象。當(dāng)然不同的場(chǎng)景決定了不同的模式用法。通過經(jīng)典的方案,我們能夠看出命令模式的用法。

  五、命令模式的其他實(shí)現(xiàn)方案

  一、輕量級(jí)的事件隊(duì)列

      考慮如下場(chǎng)景,如果我們可能在某個(gè)調(diào)用者在執(zhí)行一個(gè)動(dòng)作時(shí),我們不想調(diào)用者了解那么多的細(xì)節(jié)和內(nèi)部的交互,并且調(diào)用者的這個(gè)方法調(diào)用了很多目標(biāo)對(duì)象的不同方法,來(lái)協(xié)作完成一些操作。這些目標(biāo)對(duì)象的方法要么順序有限制,要么無(wú)順序的限制等。

      1、創(chuàng)建3個(gè)類,每個(gè)類都有自身的成員方法輸出一段字符串。      image

      2、定義一個(gè)委托:      image

      3、定義調(diào)用者:      image

      4、測(cè)試代碼:      image

      5、輸出結(jié)果:      image

  二、異步命令

      考慮現(xiàn)實(shí)我們?cè)陂_發(fā)的過程中經(jīng)常會(huì)遇到這樣的場(chǎng)景吧:我們需要執(zhí)行一個(gè)時(shí)間特別長(zhǎng)的任務(wù),如果我們將這個(gè)長(zhǎng)任務(wù)與其他的任務(wù)一起采用同步執(zhí)行的方式,客戶的體驗(yàn)不好,例如我們?cè)谙螺d的時(shí)候,如果我們能做到異步的方式的話,后臺(tái)執(zhí)行文件下載的操作,前臺(tái)用戶可以繼續(xù)執(zhí)行其他的操作,而不是等待下載完畢,才能繼續(xù)操作。這個(gè)時(shí)候,我們可能通過異步命令的方式來(lái)操作,效果肯定會(huì)更好。不然也不會(huì)出現(xiàn)那么多的異步編程的思想了。

     下面我們通過命令模式來(lái)實(shí)現(xiàn)異步命令模式:

     1、  定義命令抽象接口:      image

     2、定義異步命令接口:     image

     3、異步命令抽象的實(shí)現(xiàn):     image

image

     上面給出了異步的調(diào)用方式,通過上面的這樣的代碼形式,就能完成異步的訪問。

     4、實(shí)體的內(nèi)容:    image

    上面實(shí)體的內(nèi)容可以改進(jìn)成為,通過統(tǒng)一添加的方式來(lái)注冊(cè)事件。

    具體的調(diào)用方式如下:    image

  六、命令模式使用總結(jié)

     通過上面的講解我想大家應(yīng)該對(duì)命令模式有了一定的了解,命令模式就是將一組對(duì)象的相似行為,進(jìn)行了抽象,將調(diào)用者與被調(diào)用者之間進(jìn)行解耦,提高了應(yīng)用的靈活性。命令模式將調(diào)用的目標(biāo)對(duì)象的一些異構(gòu)性給封裝起來(lái),通過統(tǒng)一的方式來(lái)為調(diào)用者提供服務(wù)。

     相信大家通過實(shí)戰(zhàn)能夠體會(huì)該模式的好處。

it知識(shí)庫(kù)系統(tǒng)架構(gòu)技能之設(shè)計(jì)模式—命令模式,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品成人自拍 | 范冰冰hdxxxx | 少妇高潮A视频 | 国产精品久久久久久免费字体 | 窝窝影院午夜看片毛片 | 永久adc视频| 超碰97人人做人人爱网站 | yellow片高清视频免费看 | 久久国产精品高清一区二区三区 | 男人边吃奶边挵进去呻吟漫画 | 果冻传媒mv国产陈若瑶主演 | 成人中文在线 | 狠狠躁日日躁人人爽 | 日本特交大片免费观看 | 国产骚妇BB网 | 精品国产乱码久久久久久免费 | 日本另类z0zxhd| 亚洲精品天堂在线 | 一区在线观看在线 | 亚洲中文字幕日产乱码2020 | 在线 日韩 欧美 国产 社区 | 一本二卡三卡四卡乱码麻豆 | gogo亚洲肉体艺术照片9090 | 狼群影院视频在线观看WWW | 青青草国产精品 | 美国兽皇zoo在线播放 | 亚洲国产欧美在线人成aaaa20 | 亲胸揉胸膜下刺激视频在线观看 | 国产欧美精品国产国产专区 | 一级毛片皇帝 宫女 | 99re10久久热 | 国产一区二区三区内射高清 | 波多结衣一区二区三区 | 后入式啪gif动态图 后入式狂顶免费视频 | 午夜福利免费院 | 国产v综合v亚洲欧美大片 | 超碰免费视频在线观看 | 嗯好舒服嗯好大好猛好爽 | 久章草一区二区 | 欧美特黄99久久毛片免费 | 久久精品人人做人人爽97 |