久久亚洲中文字幕精_精品国产一区二区三区不卡_99久久久无码国产精品免费手机_国产亚洲精品久久久久动漫

將想法與焦點(diǎn)和您一起共享

Java命令模式:設(shè)計(jì)模式的四人幫發(fā)布者:本站     時(shí)間:2020-05-06 14:05:43

下面將對(duì)Java命令模式探討一二。首先,讓我們對(duì)命令模式進(jìn)行一個(gè)簡(jiǎn)單的理解。

Command 命令模式

Intent:

Encapsulate a request as an object , thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

瞎談:其實(shí)很好理解。命令模式,關(guān)心的就是命令(或者稱(chēng)為操作)。打個(gè)比方。在一個(gè)公司里面,整個(gè)運(yùn)作就像一個(gè)系統(tǒng)。某個(gè)boss發(fā)布了一個(gè)命令,中層領(lǐng)導(dǎo)接到這個(gè)命令,然后指派給具體負(fù)責(zé)這個(gè)員工。整個(gè)流程很清晰吧。有一個(gè)需求,如何將這個(gè)流程固定下來(lái),形成一個(gè)系統(tǒng)。我們只要抓住了重點(diǎn):命令。將它抽取出來(lái),其他的都迎刃而解了。抽取出命令,封裝成一個(gè)獨(dú)立的對(duì)象,實(shí)現(xiàn)了解耦。至于其他的,可以方便地?cái)U(kuò)展,不論這個(gè)命令是CEO,人事部,還是你爸提出來(lái)的。無(wú)論這個(gè)命令的執(zhí)行者是張三還是王八。這個(gè)模式的產(chǎn)生,其實(shí)是哲學(xué)上的“抓住主要矛盾”。更多的例子,如其他作家舉的“去路邊吃烤肉和去烤肉店吃烤肉有什么不同”或者“美猴王大鬧天宮中玉帝拍太白金星捉來(lái)猴子”。

正經(jīng):命令模式把一個(gè)請(qǐng)求或者操作封裝到一個(gè)對(duì)象中。命令模式運(yùn)行系統(tǒng)使用不同的請(qǐng)求把客戶(hù)端參數(shù)化,對(duì)請(qǐng)求排隊(duì)或者記錄請(qǐng)求日志,可以提供命令的撤銷(xiāo)和恢復(fù)功能。

Java命令模式本質(zhì)是對(duì)命令的封裝,從而把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開(kāi)了,委派給不同的對(duì)象。通俗地說(shuō),我是老總,我只管發(fā)個(gè)命令,至于這個(gè)命令發(fā)給誰(shuí),誰(shuí)執(zhí)行,關(guān)我P事,我發(fā)錢(qián)請(qǐng)人不是為了給自己找麻煩。你是負(fù)責(zé)事情的員工,你的天職是做好上級(jí)交給你的任務(wù),踏踏實(shí)實(shí),不要知道太多,不要八卦,不要問(wèn)太多了。

好處:

◆很容易構(gòu)造一個(gè)命令隊(duì)列

◆記錄相關(guān)的命令日志

◆增加命令的狀態(tài),實(shí)現(xiàn)命令的撤銷(xiāo)和重做

◆允許接受請(qǐng)求的一方?jīng)Q定是否可做

◆新的命令輕而易舉可以加入其中

缺點(diǎn):可能會(huì)有過(guò)多的具體命令類(lèi)存在

實(shí)現(xiàn):

也不難,第一步關(guān)鍵是建立Command對(duì)象。擁有點(diǎn)面向?qū)ο蟮乃枷?,就知道把它先抽象,讓繼承它的對(duì)象去具體實(shí)現(xiàn)。Client對(duì)象是發(fā)布命令的。Invoker對(duì)象是傳遞命令的,就是跑腿的。Receiver是受氣包,底層最累的程序員,負(fù)責(zé)干活吧??纯聪旅娴念?lèi)圖就清晰了:

類(lèi)圖 

上面的類(lèi)圖,一開(kāi)始我有一些疑問(wèn),不如Invoker為什么要存在?,F(xiàn)在想通了,Client的職責(zé)只是發(fā)布命令,就不要給它增加傳遞命令的職責(zé)。因?yàn)榭蛻?hù)有千千萬(wàn)萬(wàn)。在現(xiàn)實(shí)中,跑腿的人為什么要存在呢?因?yàn)轭I(lǐng)導(dǎo)之所以是領(lǐng)導(dǎo),就是只發(fā)表命令,跑腿等差事就給跑腿之人去辦吧。現(xiàn)實(shí)中,跑腿之人通常比做事之人混得要好些。因?yàn)樗麄冎g面對(duì)的是領(lǐng)導(dǎo),把做事之人功勞攬到自己身上。唉,沒(méi)想到設(shè)計(jì)模式蘊(yùn)含了如此深刻的道理,佩服“設(shè)計(jì)模式的四人幫Gof”

Java命令模式實(shí)現(xiàn)例子:

閻宏博士的書(shū)中舉了很多生動(dòng)有趣的例子,大家可以去查閱。比如一個(gè)Mp3。你按了一個(gè)播放鍵盤(pán),就播放了。這就可以算是命令模式的一種。 你是Client ,按鍵是Invoker,mp3是Receiver,播放就是一個(gè)命令Command對(duì)象。



選擇我們,優(yōu)質(zhì)服務(wù),不容錯(cuò)過(guò)
1. 優(yōu)秀的網(wǎng)絡(luò)資源,強(qiáng)大的網(wǎng)站優(yōu)化技術(shù),穩(wěn)定的網(wǎng)站和速度保證
2. 15年上海網(wǎng)站建設(shè)經(jīng)驗(yàn),優(yōu)秀的技術(shù)和設(shè)計(jì)水平,更放心
3. 全程省心服務(wù),不必?fù)?dān)心自己不懂網(wǎng)絡(luò),更省心。
------------------------------------------------------------
24小時(shí)聯(lián)系電話(huà):021-58370032
双城市| 余庆县| 安新县| 广汉市| 临西县| 璧山县| 望都县| 巴南区| 固原市| 安化县| 汉阴县| 靖远县| 泰兴市| 信阳市| 河池市| 西昌市| 高要市| 松溪县| 修水县| 右玉县| 富顺县| 五常市| 安泽县| 象山县| 黄平县| 刚察县| 奉化市| 六盘水市| 乌海市| 双峰县| 屏边| 新河县| 龙陵县| 普洱| 临泽县| 营口市| 梅河口市| 海晏县| 屏东市| 兰考县| 乌鲁木齐市|