設(shè)計(jì)模式分類

構(gòu)造型模式

  1. Factory Method (工廠方法)
  2. Abstract Factory(抽象工廠)
  3. Builder (建造者)
  4. Prototype (原型)
  5. Singleton (單例)

結(jié)構(gòu)型模式

  1. Adapter Class/Object (適配器)
  2. Composite (組合)
  3. Decorator (裝飾)
  4. Birdge (橋接)
  5. Facade (外觀)
  6. Flyweight (享元)
  7. Proxy (代理)

行為型模式

  1. Interpreter(解釋器)
  2. Template Method(模板方法
  3. Chain of Responsibility(責(zé)任鏈)
  4. Command(命令)
  5. Iterator(迭代器)
  6. Mediator(中介者,調(diào)解者)
  7. Memento(備忘錄)
  8. Observer(觀察者)
  9. State(狀態(tài))
  10. Strategy(策略)
  11. Visitor(訪問者)
design_pattern.png

Else 解釋

摘自大話設(shè)計(jì)模式

創(chuàng)建型模式
1购岗、FACTORY—追MM少不了請(qǐng)吃飯了沪斟,麥當(dāng)勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當(dāng)勞或肯德基冒黑,只管向服務(wù)員說“來四個(gè)雞翅”就行了熄攘。麥當(dāng)勞和肯德基就是生產(chǎn)雞翅的Factory

工廠模式:客戶類和工廠類分開。消費(fèi)者任何時(shí)候需要某種產(chǎn)品孕蝉,只需向工廠請(qǐng)求即可屡律。消費(fèi)者無須修改就可以接納新產(chǎn)品。缺點(diǎn)是當(dāng)產(chǎn)品修改時(shí),工廠類也要做相應(yīng)的修改。如:如何創(chuàng)建及如何向客戶端提供扶叉。

2溪窒、BUILDER—MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦姑宽,我有一個(gè)多種語言翻譯機(jī),上面每種語言都有一個(gè)按鍵,見到MM我只要按對(duì)應(yīng)的鍵繁成,它就能夠用相應(yīng)的語言說出“我愛你”這句話了,國外的MM也可以輕松搞掂淑玫,這就是我的“我愛你”builder巾腕。(這一定比美軍在伊拉克用的翻譯機(jī)好賣)

建造模式:將產(chǎn)品的內(nèi)部表象和產(chǎn)品的生成過程分割開來,從而使一個(gè)建造過程生成具有不同的內(nèi)部表象的產(chǎn)品對(duì)象絮蒿。建造模式使得產(chǎn)品內(nèi)部表象可以獨(dú)立的變化尊搬,客戶不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。建造模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程土涝。

3佛寿、FACTORY METHOD—請(qǐng)MM去麥當(dāng)勞吃漢堡,不同的MM有不同的口味,要每個(gè)都記住是一件煩人的事情冀泻,我一般采用Factory Method模式常侣,帶著MM到服務(wù)員那兒,說“要一個(gè)漢堡”弹渔,具體要什么樣的漢堡呢胳施,讓MM直接跟服務(wù)員說就行了。

工廠方法模式:核心工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建肢专,而是將具體創(chuàng)建的工作交給子類去做舞肆,成為一個(gè)抽象工廠角色,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口博杖,而不接觸哪一個(gè)產(chǎn)品類應(yīng)當(dāng)被實(shí)例化這種細(xì)節(jié)椿胯。

4、PROTOTYPE—跟MM用QQ聊天欧募,一定要說些深情的話語了压状,我搜集了好多肉麻的情話,需要時(shí)只要copy出來放到QQ里面就行了跟继,這就是我的情話prototype了种冬。(100塊錢一份,你要不要)

原始模型模式:通過給出一個(gè)原型對(duì)象來指明所要?jiǎng)?chuàng)建的對(duì)象的類型舔糖,然后用復(fù)制這個(gè)原型對(duì)象的方法創(chuàng)建出更多同類型的對(duì)象娱两。原始模型模式允許動(dòng)態(tài)的增加或減少產(chǎn)品類,產(chǎn)品類不需要非得有任何事先確定的等級(jí)結(jié)構(gòu)金吗,原始模型模式適用于任何的等級(jí)結(jié)構(gòu)十兢。缺點(diǎn)是每一個(gè)類都必須配備一個(gè)克隆方法。

5摇庙、SINGLETON—俺有6個(gè)漂亮的老婆旱物,她們的老公都是我,我就是我們家里的老公Sigleton卫袒,她們只要說道“老公”宵呛,都是指的同一個(gè)人,那就是我(剛才做了個(gè)夢(mèng)啦夕凝,哪有這么好的事)

單例模式:單例模式確保某一個(gè)類只有一個(gè)實(shí)例宝穗,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例單例模式。單例模式只應(yīng)在有真正的“單一實(shí)例”的需求時(shí)才可使用码秉。

結(jié)構(gòu)型模式

6逮矛、ADAPTER—在朋友聚會(huì)上碰到了一個(gè)美女Sarah,從香港來的转砖,可我不會(huì)說粵語须鼎,她不會(huì)說普通話,只好求助于我的朋友kent了,他作為我和Sarah之間的Adapter晋控,讓我和Sarah可以相互交談了(也不知道他會(huì)不會(huì)耍我)

適配器(變壓器)模式:把一個(gè)類的接口變換成客戶端所期待的另一種接口挑围,從而使原本因接口原因不匹配而無法一起工作的兩個(gè)類能夠一起工作。適配類可以根據(jù)參數(shù)返還一個(gè)合適的實(shí)例給客戶端糖荒。

7、BRIDGE—早上碰到MM模捂,要說早上好捶朵,晚上碰到MM,要說晚上好狂男;碰到MM穿了件新衣服综看,要說你的衣服好漂亮哦,碰到MM新做的發(fā)型岖食,要說你的頭發(fā)好漂亮哦红碑。不要問我“早上碰到MM新做了個(gè)發(fā)型怎么說”這種問題,自己用BRIDGE組合一下不就行了

橋梁模式:將抽象化與實(shí)現(xiàn)化脫耦泡垃,使得二者可以獨(dú)立的變化析珊,也就是說將他們之間的強(qiáng)關(guān)聯(lián)變成弱關(guān)聯(lián),也就是指在一個(gè)軟件系統(tǒng)的抽象化和實(shí)現(xiàn)化之間使用組合/聚合關(guān)系而不是繼承關(guān)系蔑穴,從而使兩者可以獨(dú)立的變化忠寻。

8、COMPOSITE—Mary今天過生日存和∞忍辏“我過生日,你要送我一件禮物捐腿∽菖螅”“嗯,好吧茄袖,去商店操软,你自己挑〗逝澹”“這件T恤挺漂亮寺鸥,買,這條裙子好看品山,買胆建,這個(gè)包也不錯(cuò),買肘交“试兀”“喂,買了三件了呀,我只答應(yīng)送一件禮物的哦凉驻∧逡”“什么呀,T恤加裙子加包包涝登,正好配成一套呀雄家,MM,麻煩你包起來胀滚√思茫”“……”,MM都會(huì)用Composite模式了咽笼,你會(huì)了沒有顷编?

合成模式:合成模式將對(duì)象組織到樹結(jié)構(gòu)中,可以用來描述整體與部分的關(guān)系剑刑。合成模式就是一個(gè)處理對(duì)象的樹結(jié)構(gòu)的模式媳纬。合成模式把部分與整體的關(guān)系用樹結(jié)構(gòu)表示出來。合成模式使得客戶端把一個(gè)個(gè)單獨(dú)的成分對(duì)象和由他們復(fù)合而成的合成對(duì)象同等看待施掏。

9钮惠、DECORATOR—Mary過完輪到Sarly過生日,還是不要叫她自己挑了七芭,不然這個(gè)月伙食費(fèi)肯定玩完萌腿,拿出我去年在華山頂上照的照片,在背面寫上“最好的的禮物抖苦,就是愛你的Fita”毁菱,再到街上禮品店買了個(gè)像框(賣禮品的MM也很漂亮哦),再找隔壁搞美術(shù)設(shè)計(jì)的Mike設(shè)計(jì)了一個(gè)漂亮的盒子裝起來……锌历,我們都是Decorator贮庞,最終都在修飾我這個(gè)人呀,怎么樣究西,看懂了嗎窗慎?

裝飾模式:裝飾模式以對(duì)客戶端透明的方式擴(kuò)展對(duì)象的功能,是繼承關(guān)系的一個(gè)替代方案卤材,提供比繼承更多的靈活性遮斥。動(dòng)態(tài)給一個(gè)對(duì)象增加功能,這些功能可以再動(dòng)態(tài)的撤消扇丛。增加由一些基本功能的排列組合而產(chǎn)生的非常大量的功能术吗。

10、FACADE—我有一個(gè)專業(yè)的Nikon相機(jī)帆精,我就喜歡自己手動(dòng)調(diào)光圈较屿、快門隧魄,這樣照出來的照片才專業(yè),但MM可不懂這些隘蝎,教了半天也不會(huì)购啄。幸好相機(jī)有Facade設(shè)計(jì)模式,把相機(jī)調(diào)整到自動(dòng)檔嘱么,只要對(duì)準(zhǔn)目標(biāo)按快門就行了狮含,一切由相機(jī)自動(dòng)調(diào)整,這樣MM也可以用這個(gè)相機(jī)給我拍張照片了曼振。

門面模式:外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)統(tǒng)一的門面對(duì)象進(jìn)行辉川。門面模式提供一個(gè)高層次的接口,使得子系統(tǒng)更易于使用拴测。每一個(gè)子系統(tǒng)只有一個(gè)門面類,而且此門面類只有一個(gè)實(shí)例府蛇,也就是說它是一個(gè)單例模式集索。但整個(gè)系統(tǒng)可以有多個(gè)門面類。

11汇跨、FLYWEIGHT—每天跟MM發(fā)短信务荆,手指都累死了,最近買了個(gè)新手機(jī)穷遂,可以把一些常用的句子存在手機(jī)里函匕,要用的時(shí)候,直接拿出來蚪黑,在前面加上MM的名字就可以發(fā)送了盅惜,再不用一個(gè)字一個(gè)字敲了。共享的句子就是Flyweight忌穿,MM的名字就是提取出來的外部特征抒寂,根據(jù)上下文情況使用。

享元模式:FLYWEIGHT在拳擊比賽中指最輕量級(jí)掠剑。享元模式以共享的方式高效的支持大量的細(xì)粒度對(duì)象屈芜。享元模式能做到共享的關(guān)鍵是區(qū)分內(nèi)蘊(yùn)狀態(tài)和外蘊(yùn)狀態(tài)。內(nèi)蘊(yùn)狀態(tài)存儲(chǔ)在享元內(nèi)部朴译,不會(huì)隨環(huán)境的改變而有所不同井佑。外蘊(yùn)狀態(tài)是隨環(huán)境的改變而改變的。外蘊(yùn)狀態(tài)不能影響內(nèi)蘊(yùn)狀態(tài)眠寿,它們是相互獨(dú)立的躬翁。將可以共享的狀態(tài)和不可以共享的狀態(tài)從常規(guī)類中區(qū)分開來,將不可以共享的狀態(tài)從類里剔除出去盯拱∧妨恚客戶端不可以直接創(chuàng)建被共享的對(duì)象喇肋,而應(yīng)當(dāng)使用一個(gè)工廠對(duì)象負(fù)責(zé)創(chuàng)建被共享的對(duì)象。享元模式大幅度的降低內(nèi)存中對(duì)象的數(shù)量迹辐。

12蝶防、PROXY—跟MM在網(wǎng)上聊天,一開頭總是“hi,你好”,“你從哪兒來呀明吩?”“你多大了间学?”“身高多少呀?”這些話印荔,真煩人低葫,寫個(gè)程序做為我的Proxy吧,凡是接收到這些話都設(shè)置好了自動(dòng)的回答仍律,接收到其他的話時(shí)再通知我回答嘿悬,怎么樣,酷吧水泉。

代理模式:代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象善涨,并由代理對(duì)象控制對(duì)源對(duì)象的引用。代理就是一個(gè)人或一個(gè)機(jī)構(gòu)代表另一個(gè)人或者一個(gè)機(jī)構(gòu)采取行動(dòng)草则。某些情況下钢拧,客戶不想或者不能夠直接引用一個(gè)對(duì)象,代理對(duì)象可以在客戶和目標(biāo)對(duì)象直接起到中介的作用炕横≡茨冢客戶端分辨不出代理主題對(duì)象與真實(shí)主題對(duì)象。代理模式可以并不知道真正的被代理對(duì)象份殿,而僅僅持有一個(gè)被代理對(duì)象的接口膜钓,這時(shí)候代理對(duì)象不能夠創(chuàng)建被代理對(duì)象,被代理對(duì)象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入卿嘲。

行為模式

13呻此、CHAIN OF RESPONSIBLEITY—晚上去上英語課,為了好開溜坐到了最后一排腔寡,哇焚鲜,前面坐了好幾個(gè)漂亮的MM哎,找張紙條放前,寫上“Hi,可以做我的女朋友嗎忿磅?如果不愿意請(qǐng)向前傳”,紙條就一個(gè)接一個(gè)的傳上去了凭语,糟糕葱她,傳到第一排的MM把紙條傳給老師了,聽說是個(gè)老處女呀似扔,快跑!

責(zé)任鏈模式:在責(zé)任鏈模式中吨些,很多對(duì)象由每一個(gè)對(duì)象對(duì)其下家的引用而接

起來形成一條鏈搓谆。請(qǐng)求在這個(gè)鏈上傳遞,直到鏈上的某一個(gè)對(duì)象決定處理此請(qǐng)求豪墅∪郑客戶并不知道鏈上的哪一個(gè)對(duì)象最終處理這個(gè)請(qǐng)求,系統(tǒng)可以在不影響客戶端的情況下動(dòng)態(tài)的重新組織鏈和分配責(zé)任偶器。處理者有兩個(gè)選擇:承擔(dān)責(zé)任或者把責(zé)任推給下家斩萌。一個(gè)請(qǐng)求可以最終不被任何接收端對(duì)象所接受。

14屏轰、COMMAND—俺有一個(gè)MM家里管得特別嚴(yán)颊郎,沒法見面,只好借助于她弟弟在我們倆之間傳送信息霎苗,她對(duì)我有什么指示姆吭,就寫一張紙條讓她弟弟帶給我。這不唁盏,她弟弟又傳送過來一個(gè)COMMAND内狸,為了感謝他,我請(qǐng)他吃了碗雜醬面升敲,哪知道他說:“我同時(shí)給我姐姐三個(gè)男朋友送COMMAND,就數(shù)你最小氣轰传,才請(qǐng)我吃面驴党。”获茬,:-(

命令模式:命令模式把一個(gè)請(qǐng)求或者操作封裝到一個(gè)對(duì)象中港庄。命令模式把發(fā)出命令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對(duì)象恕曲。命令模式允許請(qǐng)求的一方和發(fā)送的一方獨(dú)立開來鹏氧,使得請(qǐng)求的一方不必知道接收請(qǐng)求的一方的接口,更不必知道請(qǐng)求是怎么被接收佩谣,以及操作是否執(zhí)行把还,何時(shí)被執(zhí)行以及是怎么被執(zhí)行的。系統(tǒng)支持命令的撤消茸俭。

15吊履、INTERPRETER—俺有一個(gè)《泡MM真經(jīng)》,上面有各種泡MM的攻略调鬓,比如說去吃西餐的步驟艇炎、去看電影的方法等等,跟MM約會(huì)時(shí)腾窝,只要做一個(gè)Interpreter缀踪,照著上面的腳本執(zhí)行就可以了居砖。

解釋器模式:給定一個(gè)語言后,解釋器模式可以定義出其文法的一種表示驴娃,并同時(shí)提供一個(gè)解釋器奏候。客戶端可以使用這個(gè)解釋器來解釋這個(gè)語言中的句子托慨。解釋器模式將描述怎樣在有了一個(gè)簡單的文法后鼻由,使用模式設(shè)計(jì)解釋這些語句。在解釋器模式里面提到的語言是指任何解釋器對(duì)象能夠解釋的任何組合厚棵。在解釋器模式中需要定義一個(gè)代表文法的命令類的等級(jí)結(jié)構(gòu)蕉世,也就是一系列的組合規(guī)則。每一個(gè)命令對(duì)象都有一個(gè)解釋方法婆硬,代表對(duì)命令對(duì)象的解釋狠轻。命令對(duì)象的等級(jí)結(jié)構(gòu)中的對(duì)象的任何排列組合都是一個(gè)語言。

16彬犯、ITERATOR—我愛上了Mary向楼,不顧一切的向她求婚。

Mary:“想要我跟你結(jié)婚谐区,得答應(yīng)我的條件”

我:“什么條件我都答應(yīng)湖蜕,你說吧”

Mary:“我看上了那個(gè)一克拉的鉆石”

我:“我買,我買宋列,還有嗎昭抒?”

Mary:“我看上了湖邊的那棟別墅”

我:“我買,我買炼杖,還有嗎灭返?”

Mary:“你的小弟弟必須要有50cm長”

我腦袋嗡的一聲,坐在椅子上坤邪,一咬牙:“我剪熙含,我剪,還有嗎艇纺?”

……

迭代子模式:迭代子模式可以順序訪問一個(gè)聚集中的元素而不必暴露聚集的內(nèi)部表象怎静。多個(gè)對(duì)象聚在一起形成的總體稱之為聚集,聚集對(duì)象是能夠包容一組對(duì)象的容器對(duì)象黔衡。迭代子模式將迭代邏輯封裝到一個(gè)獨(dú)立的子對(duì)象中消约,從而與聚集本身隔開。迭代子模式簡化了聚集的界面员帮。每一個(gè)聚集對(duì)象都可以有一個(gè)或一個(gè)以上的迭代子對(duì)象或粮,每一個(gè)迭代子的迭代狀態(tài)可以是彼此獨(dú)立的。迭代算法可以獨(dú)立于聚集角色變化捞高。

17氯材、MEDIATOR—四個(gè)MM打麻將渣锦,相互之間誰應(yīng)該給誰多少錢算不清楚了,幸虧當(dāng)時(shí)我在旁邊氢哮,按照各自的籌碼數(shù)算錢袋毙,賺了錢的從我這里拿,賠了錢的也付給我冗尤,一切就OK啦听盖,俺得到了四個(gè)MM的電話。

調(diào)停者模式:調(diào)停者模式包裝了一系列對(duì)象相互作用的方式裂七,使得這些對(duì)象不必相互明顯作用皆看。從而使他們可以松散偶合。當(dāng)某些對(duì)象之間的作用發(fā)生改變時(shí)背零,不會(huì)立即影響其他的一些對(duì)象之間的作用腰吟。保證這些作用可以彼此獨(dú)立的變化。調(diào)停者模式將多對(duì)多的相互作用轉(zhuǎn)化為一對(duì)多的相互作用徙瓶。調(diào)停者模式將對(duì)象的行為和協(xié)作抽象化毛雇,把對(duì)象在小尺度的行為上與其他對(duì)象的相互作用分開處理。

18侦镇、MEMENTO—同時(shí)跟幾個(gè)MM聊天時(shí)灵疮,一定要記清楚剛才跟MM說了些什么話,不然MM發(fā)現(xiàn)了會(huì)不高興的哦壳繁,幸虧我有個(gè)備忘錄震捣,剛才與哪個(gè)MM說了什么話我都拷貝一份放到備忘錄里面保存,這樣可以隨時(shí)察看以前的記錄啦氮趋。

備忘錄模式:備忘錄對(duì)象是一個(gè)用來存儲(chǔ)另外一個(gè)對(duì)象內(nèi)部狀態(tài)的快照的對(duì)象伍派。備忘錄模式的用意是在不破壞封裝的條件下江耀,將一個(gè)對(duì)象的狀態(tài)捉住剩胁,并外部化,存儲(chǔ)起來祥国,從而可以在將來合適的時(shí)候把這個(gè)對(duì)象還原到存儲(chǔ)起來的狀態(tài)昵观。

19、OBSERVER—想知道咱們公司最新MM情報(bào)嗎舌稀?加入公司的MM情報(bào)郵件組就行了啊犬,tom負(fù)責(zé)搜集情報(bào),他發(fā)現(xiàn)的新情報(bào)不用一個(gè)一個(gè)通知我們壁查,直接發(fā)布給郵件組觉至,我們作為訂閱者(觀察者)就可以及時(shí)收到情報(bào)啦

觀察者模式:觀察者模式定義了一種一隊(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象睡腿。這個(gè)主題對(duì)象在狀態(tài)上發(fā)生變化時(shí)语御,會(huì)通知所有觀察者對(duì)象峻贮,使他們能夠自動(dòng)更新自己。

20应闯、STATE—跟MM交往時(shí)纤控,一定要注意她的狀態(tài)哦,在不同的狀態(tài)時(shí)她的行為會(huì)有不同碉纺,比如你約她今天晚上去看電影船万,對(duì)你沒興趣的MM就會(huì)說“有事情啦”,對(duì)你不討厭但還沒喜歡上的MM就會(huì)說“好啊骨田,不過可以帶上我同事么耿导?”,已經(jīng)喜歡上你的MM就會(huì)說“幾點(diǎn)鐘盛撑?看完電影再去泡吧怎么樣碎节?”,當(dāng)然你看電影過程中表現(xiàn)良好的話抵卫,也可以把MM的狀態(tài)從不討厭不喜歡變成喜歡哦狮荔。

狀態(tài)模式:狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變行為。這個(gè)對(duì)象看上去象是改變了它的類一樣介粘。狀態(tài)模式把所研究的對(duì)象的行為包裝在不同的狀態(tài)對(duì)象里殖氏,每一個(gè)狀態(tài)對(duì)象都屬于一個(gè)抽象狀態(tài)類的一個(gè)子類。狀態(tài)模式的意圖是讓一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候姻采,其行為也隨之改變雅采。狀態(tài)模式需要對(duì)每一個(gè)系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個(gè)狀態(tài)類的子類。當(dāng)系統(tǒng)的狀態(tài)變化時(shí)慨亲,系統(tǒng)便改變所選的子類婚瓜。

21、STRATEGY—跟不同類型的MM約會(huì)刑棵,要用不同的策略巴刻,有的請(qǐng)電影比較好,有的則去吃小吃效果不錯(cuò)蛉签,有的去海邊浪漫最合適胡陪,單目的都是為了得到MM的芳心,我的追MM錦囊中有好多Strategy哦碍舍。

策略模式:策略模式針對(duì)一組算法柠座,將每一個(gè)算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可以相互替換片橡。策略模式使得算法可以在不影響到客戶端的情況下發(fā)生變化妈经。策略模式把行為和環(huán)境分開。環(huán)境類負(fù)責(zé)維持和查詢行為類,各種算法在具體的策略類中提供吹泡。由于算法和環(huán)境獨(dú)立開來录煤,算法的增減,修改都不會(huì)影響到環(huán)境和客戶端荞胡。

22妈踊、TEMPLATE METHOD——看過《如何說服女生上床》這部經(jīng)典文章嗎?女生從認(rèn)識(shí)到上床的不變的步驟分為巧遇泪漂、打破僵局廊营、展開追求、接吻萝勤、前戲露筒、動(dòng)手、愛撫敌卓、進(jìn)去八大步驟(Template method)慎式,但每個(gè)步驟針對(duì)不同的情況,都有不一樣的做法趟径,這就要看你隨機(jī)應(yīng)變啦(具體實(shí)現(xiàn))瘪吏;

模板方法模式:模板方法模式準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體方法以及具體構(gòu)造子的形式實(shí)現(xiàn)蜗巧,然后聲明一些抽象方法來迫使子類實(shí)現(xiàn)剩余的邏輯掌眠。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法,從而對(duì)剩余的邏輯有不同的實(shí)現(xiàn)幕屹。先制定一個(gè)頂級(jí)邏輯框架蓝丙,而將邏輯的細(xì)節(jié)留給具體的子類去實(shí)現(xiàn)。

23望拖、VISITOR—情人節(jié)到了渺尘,要給每個(gè)MM送一束鮮花和一張卡片,可是每個(gè)MM送的花都要針對(duì)她個(gè)人的特點(diǎn)说敏,每張卡片也要根據(jù)個(gè)人的特點(diǎn)來挑鸥跟,我一個(gè)人哪搞得清楚,還是找花店老板和禮品店老板做一下Visitor像云,讓花店老板根據(jù)MM的特點(diǎn)選一束花锌雀,讓禮品店老板也根據(jù)每個(gè)人特點(diǎn)選一張卡蚂夕,這樣就輕松多了迅诬;

訪問者模式:訪問者模式的目的是封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操作。一旦這些操作需要修改的話婿牍,接受這個(gè)操作的數(shù)據(jù)結(jié)構(gòu)可以保持不變侈贷。訪問者模式適用于數(shù)據(jù)結(jié)構(gòu)相對(duì)未定的系統(tǒng),它把數(shù)據(jù)結(jié)構(gòu)和作用于結(jié)構(gòu)上的操作之間的耦合解脫開,使得操作集合可以相對(duì)自由的演化俏蛮。訪問者模式使得增加新的操作變的很容易撑蚌,就是增加一個(gè)新的訪問者類。訪問者模式將有關(guān)的行為集中到一個(gè)訪問者對(duì)象中搏屑,而不是分散到一個(gè)個(gè)的節(jié)點(diǎn)類中争涌。當(dāng)使用訪問者模式時(shí),要將盡可能多的對(duì)象瀏覽邏輯放在訪問者類中辣恋,而不是放到它的子類中亮垫。訪問者模式可以跨過幾個(gè)類的等級(jí)結(jié)構(gòu)訪問屬于不同的等級(jí)結(jié)構(gòu)的成員類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伟骨,一起剝皮案震驚了整個(gè)濱河市饮潦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌携狭,老刑警劉巖继蜡,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逛腿,居然都是意外死亡稀并,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門单默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稻轨,“玉大人,你說我怎么就攤上這事雕凹∨咕悖” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵枚抵,是天一觀的道長线欲。 經(jīng)常有香客問我,道長汽摹,這世上最難降的妖魔是什么李丰? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮逼泣,結(jié)果婚禮上趴泌,老公的妹妹穿的比我還像新娘。我一直安慰自己拉庶,他們只是感情好嗜憔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氏仗,像睡著了一般吉捶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天呐舔,我揣著相機(jī)與錄音币励,去河邊找鬼。 笑死珊拼,一個(gè)胖子當(dāng)著我的面吹牛食呻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播澎现,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搁进,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了昔头?” 一聲冷哼從身側(cè)響起饼问,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揭斧,沒想到半個(gè)月后莱革,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讹开,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年盅视,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旦万。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闹击,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出成艘,到底是詐尸還是另有隱情赏半,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布淆两,位于F島的核電站断箫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秋冰。R本人自食惡果不足惜仲义,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剑勾。 院中可真熱鬧埃撵,春花似錦、人聲如沸虽另。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洲赵。三九已至鸳惯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叠萍,已是汗流浹背芝发。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苛谷,地道東北人辅鲸。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像腹殿,于是被迫代替她去往敵國和親独悴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理锣尉,服務(wù)發(fā)現(xiàn)刻炒,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 設(shè)計(jì)模式匯總 一自沧、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用坟奥、多...
    MinoyJet閱讀 3,947評(píng)論 1 15
  • 設(shè)計(jì)模式可以分為三大類: 創(chuàng)建型模式(Ceeational Patterns) 結(jié)構(gòu)型模式(Structural ...
    Galileo_404閱讀 667評(píng)論 0 1
  • 好的軟件設(shè)計(jì)是多用代碼復(fù)用,但實(shí)際設(shè)計(jì)中卻要遇到許多變化拇厢,而變化是復(fù)用的天敵爱谁。為了能夠盡量減少變化所帶來的設(shè)計(jì)復(fù)雜...
    CharlesW閱讀 574評(píng)論 0 0
  • 第一次見到錘子手機(jī)是T1,我的發(fā)小從英國回來創(chuàng)業(yè)到上海辦事孝偎,手里就拿了一部访敌,我記憶的印象是真黑啊,可是我拿在手里看...
    五彩冰峰閱讀 775評(píng)論 3 3