淺談Java設(shè)計(jì)模式之命令模式

? ? ? ?命令模式可以將請(qǐng)求發(fā)送者和接收者完全解耦鬼贱,發(fā)送者與接收者之間沒有直接引用關(guān)系吧秕,發(fā)送請(qǐng)求的對(duì)象只需要知道如何發(fā)送請(qǐng)求惨寿,而不必知道如何完成請(qǐng)求邦泄。核心在于引入了命令類,通過命令類來降低發(fā)送者和接收者的耦合度裂垦,請(qǐng)求發(fā)送者只需指定一個(gè)命令對(duì)象顺囊,再通過命令對(duì)象來調(diào)用請(qǐng)求接收者的處理方法,命令模式是一種對(duì)象行為型模式蕉拢。

? ? ? ? 要想明白這段定義特碳,我們首先得明白什么是解耦,以及我們?yōu)槭裁葱枰怦钤位弧n櫭剂x午乓,解耦就是解除類與類之間的耦合關(guān)系,解耦能提高程序解決問題的概率届巩,提高解決問題的效果硅瞧,提高解決問題的速度,降低將來爆發(fā)隱患的可能性恕汇。舉個(gè)栗子腕唧,在一家新開業(yè)的咖啡店內(nèi),收銀員與咖啡師是同一個(gè)人瘾英,我們可以稱之為萬能員工枣接,他既要給顧客開單,又要去制作咖啡缺谴。在顧客少的時(shí)候當(dāng)然沒有問題但惶。但當(dāng)?shù)赇伜苁軞g迎時(shí),大量的顧客涌入就會(huì)癱瘓掉這個(gè)單一的開單--制作?的系統(tǒng)。

????????這個(gè)時(shí)候我們就要思考怎么辦膀曾,就我的思路而言县爬,一是增加員工數(shù),咖啡機(jī)數(shù)添谊,二是提高工作效率财喳。由于店鋪本身的限制,我們并不可能無限制地增加員工和咖啡機(jī)的數(shù)量斩狱,因此我們必須提高效率耳高。提高效率的方法有很多種,我們這里就采用面向?qū)ο笾械乃悸匪唬醋尫?wù)員只負(fù)責(zé)下單泌枪,聘請(qǐng)專用的咖啡師來調(diào)咖啡,以減少在下單時(shí)可能的錯(cuò)誤和來回? ?下單---制作咖啡? ?過程中所浪費(fèi)的時(shí)間秕岛。這樣將萬能員工身上的兩項(xiàng)工作分離出來交給兩種不同的角色處理碌燕,這就是解耦。

? ? ? ? 回歸到軟件開發(fā)的思路上來瓣蛀,我們可以將咖啡店的模式套用過來陆蟆,讓服務(wù)員(invoker)與咖啡師(receiver)完全解耦,服務(wù)員只負(fù)責(zé)下單惋增,單子通過命令(command)傳輸被傳遞到咖啡師那兒叠殷,咖啡師只負(fù)責(zé)執(zhí)行,服務(wù)員不用明白咖啡師怎么制作咖啡诈皿,咖啡師不用明白有多少人下了單林束,這樣,二者完全解耦稽亏,更能提高工作效率壶冒。

---------------------------------------------------------代碼實(shí)現(xiàn)--------------------------------------------------------

waiter == invoker;

barista == receiver;

bill == command;

concreteBill == concreteCommand;

------

public interface Bill

{

? ? public void execute();

}

------------------------------------------------

public class Waiter

{

? ? private Bill bill;

? ? public Waiter(Bill bill)

? ? {

? ? ? ? this.bill = bill;

? ? }

? ? public void action()

? ? {

? ? ? ?bill.execute();

? ? }

}

------------------------------------------

public class ConcreteBill implements Bill{?

?private Barista barista;

? ? public ConcreteBill(Barista barista)

? ? {

? ? ? ? this.barista= barista;

? ? }

? ? @Override? ? public void execute()

? ? {

? ? ? ? barista.action();

? ? }

}

------------------------------------------------

public class Barista

{

? ? public void action()

? ? {

? ? ? ? System.out.println("Bill received!");

? ? }

}

---------------------------------------------------

public class Test

{

? ? public static void main(String[] args)

? ? {

? ? ? ? Barista barista = new Barista();

? ? ? ? Bill bill = new ConcreteBill(barista);

? ? ? ? Waiter waiter = new Waiter(bill);

? ? ? ? waiter.action();

? ? }

}

-----------------------------------------------------------------------------------------------------------------------------------

? ? ? ? 這就是簡(jiǎn)單的命令模式模板。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末截歉,一起剝皮案震驚了整個(gè)濱河市胖腾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘪松,老刑警劉巖咸作,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宵睦,居然都是意外死亡记罚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門壳嚎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桐智,“玉大人末早,你說我怎么就攤上這事∷低ィ” “怎么了然磷?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)刊驴。 經(jīng)常有香客問我样屠,道長(zhǎng),這世上最難降的妖魔是什么缺脉? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮悦穿,結(jié)果婚禮上攻礼,老公的妹妹穿的比我還像新娘。我一直安慰自己栗柒,他們只是感情好礁扮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬沦,像睡著了一般太伊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逛钻,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天僚焦,我揣著相機(jī)與錄音,去河邊找鬼曙痘。 笑死芳悲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的边坤。 我是一名探鬼主播名扛,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茧痒!你這毒婦竟也來了肮韧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤旺订,失蹤者是張志新(化名)和其女友劉穎弄企,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耸峭,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桩蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劳闹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片院究。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洽瞬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出业汰,到底是詐尸還是另有隱情伙窃,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布样漆,位于F島的核電站为障,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏放祟。R本人自食惡果不足惜鳍怨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跪妥。 院中可真熱鬧鞋喇,春花似錦、人聲如沸眉撵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纽疟。三九已至罐韩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間污朽,已是汗流浹背散吵。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟆肆,地道東北人错蝴。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颓芭,于是被迫代替她去往敵國(guó)和親顷锰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理亡问,服務(wù)發(fā)現(xiàn)官紫,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法州藕,類相關(guān)的語(yǔ)法束世,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法床玻,異常的語(yǔ)法毁涉,線程的語(yǔ)...
    子非魚_t_閱讀 31,625評(píng)論 18 399
  • 設(shè)計(jì)模式分類 總體來說設(shè)計(jì)模式分為三大類:創(chuàng)建型模式,共五種:工廠方法模式锈死、抽象工廠模式贫堰、單例模式穆壕、建造者模式、原...
    lifeline丿毅閱讀 1,214評(píng)論 0 2
  • 1.風(fēng)會(huì)熄滅蠟燭其屏,卻能使火越燒越旺喇勋。對(duì)隨機(jī)性、不確定性和混沌也是一樣:你要學(xué)會(huì)利用它們偎行,而不是躲避它們川背。你要成為火...
    A01琪公子閱讀 3,628評(píng)論 0 3
  • 這段時(shí)間在看唐史相關(guān)的書熄云,包括《血腥的盛唐》《易中天中華史·隋唐定局》《劍橋中國(guó)隋唐史》等,發(fā)現(xiàn)唐朝有許多與眾不同...
    秦瑟讀書閱讀 598評(píng)論 0 2