1甘改、 =SIMPLE FACTORY=
打完籃球真累十艾,正好邊上有個(gè)小攤腾节。
“來杯可樂案腺。”
“我要芬達(dá)访递】阶耍”
“一瓶礦泉水∶杼希”
工廠模式:客戶類和工廠類分開踪古。消費(fèi)者任何時(shí)候需要某種產(chǎn)品伏穆,只需向工廠請(qǐng)求即可拘泞。
消費(fèi)者無須修改就可以接納新產(chǎn)品。有了小攤這個(gè)工廠枕扫,我們口渴的問題就很easy的解決了田弥。
2、 =FACTORY METHOD=
以前每次下午打完籃球后一般很晚铡原,回來再洗個(gè)澡偷厦,食堂就關(guān)門了。我們就集體跑過西三 門外吃牛肉面(呵呵燕刻,人生之一大爽事啊)卵洗,每個(gè)餐廳的風(fēng)味還不一樣请唱,這無所謂啦,我 們只要說一句“來碗牛肉面“就行了过蹂。
工廠方法模式:核心工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建十绑,而是將具體創(chuàng)建的工作交給子類去
做,成為一個(gè)抽象工廠角色酷勺,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口本橙,而不接觸哪一個(gè)產(chǎn)
品類應(yīng)當(dāng)被實(shí)例化這種細(xì)節(jié)。每一個(gè)餐廳就是一個(gè)具體的工廠脆诉,可惜現(xiàn)在西三門已經(jīng)關(guān)
掉 了甚亭,郁悶ing!
3击胜、 =SINGLETON=
Kobe就是Kobe亏狰,不管你是從電視上看到,還是從報(bào)紙上看到偶摔,其實(shí)就是他一個(gè)人
單例模式:?jiǎn)卫J酱_保某一個(gè)類只有一個(gè)實(shí)例暇唾,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)
實(shí)例單例模式。組織后衛(wèi)可以有幾個(gè),但Kobe只能有一個(gè)策州,廢話瘸味!
4、 =BUILDER=
NBA中強(qiáng)隊(duì)頗多抽活,且各有自己的特點(diǎn)硫戈,因此對(duì)付不同的隊(duì)有不同的打法,但你只要說“今天打國(guó)王”就行了下硕,具體該怎么打由教練去安排(build)就行了丁逝。
建造模式:將產(chǎn)品的內(nèi)部表象和客戶端分來,客戶不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)梭姓,因此當(dāng)
產(chǎn)品的表象一般很復(fù)雜時(shí)才用霜幼。戰(zhàn)術(shù)安排的確是個(gè)比較專業(yè)的任務(wù),所以…誉尖。
5罪既、 =PROTOTYPE=
今年全明星賽真不錯(cuò),真想再看一遍铡恕。
“小陳琢感,把serv-u開一下,我下你的全明星賽探熔【哉耄”
“OK!不過先上傳兩部好片诀艰〖砩”
“啊,我暈~~!”
原始模型模式:實(shí)際上就是復(fù)制啦其垄。原始模型模式允許動(dòng)態(tài)的增加或減少產(chǎn)品類苛蒲,產(chǎn)品類
適合于任何的等級(jí)結(jié)構(gòu)。缺點(diǎn)是每一個(gè)類都必須配備一個(gè)克隆方法绿满。還好臂外,Windows里面
的東東只要點(diǎn)右鍵,都有個(gè)復(fù)制選項(xiàng)棒口。
==結(jié)構(gòu)型模式==
6寄月、 =ADAPTER=
姚明剛?cè)セ鸺龝r(shí),交流有點(diǎn)不便无牵,但通過經(jīng)紀(jì)人Adapter,姚明很快就和火箭的其他人混熟了厂抖。
適配器模式:把一個(gè)類的接口變換成客戶端所期待的另一種接口茎毁,從而使原本因接口原因
不匹配而無法一起工作的兩個(gè)類能夠一起工作。通過經(jīng)紀(jì)人Adapter,主教練就可以把姚
明看作本土人(會(huì)說e文的人)七蜘。如今姚明已經(jīng)加強(qiáng)了功能谭溉,使得不要經(jīng)紀(jì)人也可以和主
教練交流,呵呵橡卤,str man扮念!
7、 =COMPOSITE=
上半場(chǎng)被灌了個(gè)50:25碧库,趁中場(chǎng)暫停柜与,大家一起來安排下半場(chǎng)怎么打:
“方案A:6號(hào)太準(zhǔn),要專人盯防嵌灰∨埃”―“就是就是!”
“方案B:左邊防守太弱沽瞭,把XX換上來迁匠。”-“好耶好耶驹溃!”
“方案C:進(jìn)攻太差城丧,多打一些擋差⊥愫祝”-“不錯(cuò)不錯(cuò)亡哄!”
“方案D:上半場(chǎng)方案X其實(shí)還是不錯(cuò)的,下半場(chǎng)go on傍药』瞧剑”-“OKOK!“
…
一聲哨響拐辽,下半場(chǎng)開始拣挪,我們把方案A,B俱诸,C…結(jié)合菠劝,定為方案Y。@#¥%^&*(睁搭!~等一系列后赶诊,我們終于以51:50戰(zhàn)勝對(duì)手,哈哈…T奥妗舔痪!白日夢(mèng)#&@*!
合成模式:合成模式使得客戶端把單獨(dú)的成分對(duì)象和由他們復(fù)合而成的合成對(duì)象同等
看待锌唾,因此合成模式使得客戶端增加新的構(gòu)件變得容易锄码。方案A是一條簡(jiǎn)單的方案夺英,方案
D是由不同的方案結(jié)合而成的復(fù)雜方案,但我們不管這些滋捶,我們只知道它們都是我們所要
的方案痛悯。
8、 =DECORATOR=
記得西邊操場(chǎng)沒修好時(shí)重窟,我們踢球沒有地盤载萌,還好,有個(gè)籃球場(chǎng)是空的巡扇,我們便撿來幾塊磚頭扭仁,擺上兩個(gè)門,哈哈霎迫,這樣斋枢,籃球場(chǎng)也就變成小足球場(chǎng)了。
系里舉辦一個(gè)舞會(huì)知给,得找塊大點(diǎn)的地盤瓤帚,我們又看中了籃球場(chǎng),掛起一盞燈涩赢,搬來兩個(gè)音箱戈次,ok,一切搞定筒扒。這樣怯邪,籃球場(chǎng)便變成了舞會(huì)廳了,哈哈花墩。
裝飾模式:裝飾模式以對(duì)客戶端透明的方式擴(kuò)展對(duì)象的功能悬秉,是繼承關(guān)系的一個(gè)替代
方案,提供比繼承更多的靈活性冰蘑。其實(shí)和泌,籃球場(chǎng)還可以變成很多其它的東東,只要發(fā)揮你
的想像祠肥,嘻嘻武氓。
9、 =PROXY=
玩NBA正happying仇箱。
突然县恕,小付跑過來說:“你的電話,X系說明天下午兩點(diǎn)要跟俺們系干一場(chǎng)剂桥,怎么樣忠烛?”
-“OK,就跟他們說沒問題权逗!”玩Games要緊况木。
小付作為一個(gè)代理倒省了俺不少事垒拢,呵呵旬迹。
代理模式:代理就是一個(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)建并傳入按灶。X系只知道我們同意和他們
干一場(chǎng),但并不知道是回答他們的就是小付筐咧。
10鸯旁、 =FLYWEIGHT=
上次說到吃牛肉面,我們當(dāng)中有幾個(gè)還特挑剔量蕊。這不:
“老板铺罢,我要麻辣的〔信冢”-“好咧韭赘!”唰唰,老板放了些辣醬势就。
“我要川味的泉瞻。”-“好咧苞冯!”唰唰袖牙,老板放了些泡菜。
“我也要川味的抱完≡籼眨”-老板按剛才的樣式又做了一遍。
小陳一看大家都要巧娱,不服碉怔,就說:“老板,俺要黑的禁添〈殡剩”
“黑的?黑的是什么樣的老翘∏凵叮”老板納悶了锻离。
“黑的,黑的就是多放些醬油…”-全場(chǎng)狂暈#&*%
享元模式:享元模式以共享的方式高效的支持大量的細(xì)粒度對(duì)象墓怀。享元模式能做
到共享的關(guān)鍵是其狀態(tài)存儲(chǔ)在享元內(nèi)部汽纠,不會(huì)隨環(huán)境的改變而有所不同。將可以共享的狀
態(tài)和不可以共享的狀態(tài)從常規(guī)類中區(qū)分開來傀履,把不可以共享的狀態(tài)從類里剔除出去虱朵。客戶
端從工廠中獲得對(duì)象時(shí)钓账,工廠會(huì)先檢查其是否有該對(duì)象碴犬,如果有則直接返回給客戶,沒有
才創(chuàng)建新的實(shí)例梆暮。享元模式大幅度的降低內(nèi)存中對(duì)象的數(shù)量服协。那些麻辣啦,川味啦啦粹,都是
享元偿荷,要的牛肉面有很多,但口味卻就那么幾種卖陵。后來遭顶,我們打玩籃球又去了那家店,還
沒等過小陳開口泪蔫,老板就說:“這位同學(xué)棒旗,你是要黑牛肉面吧×萌伲”-小陳“……”
11铣揉、=FACADE=
又要和X系開始一季一度的比賽了,具體時(shí)間和地點(diǎn)還得靠俺這個(gè)隊(duì)長(zhǎng)來搞定餐曹,好逛拱,no problem!給X系籃球隊(duì)隊(duì)長(zhǎng)一個(gè)call:“星期六下午3:00台猴,我們一見高下朽合。”
門面模式:門面模式提供一個(gè)高層次的接口饱狂,使得子系統(tǒng)更易于使用曹步,它將客戶
端和一些子系統(tǒng)分離,提高子系統(tǒng)的獨(dú)立性和可移植性休讳。X系籃球隊(duì)隊(duì)長(zhǎng)就是個(gè)Facade讲婚,
通過他,免得我要去跟他們系隊(duì)員(子系統(tǒng))一個(gè)個(gè)去通知俊柔。
12筹麸、=BRIDGE=
我是個(gè)學(xué)生活合,但在籃球隊(duì)里,我又是個(gè)隊(duì)員物赶,那你說我是什么白指,超級(jí)賽亞人?呵呵块差。
橋梁模式:將抽象化與實(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ú)立的變化需五。哈哈鹉动,多虧這個(gè)模式,不然我還真不知
道該怎么稱呼我自己呢宏邮,嘻嘻泽示。
==行為模式==
13、=STRATEGY=
足球里有很多戰(zhàn)術(shù)蜜氨,比如械筛,一般情況用442,打強(qiáng)隊(duì)可以用451飒炎,打弱隊(duì)可以用343埋哟。
當(dāng)然籃球里面也有的,比如郎汪,你可以選擇打中鋒赤赊,或者遠(yuǎn)投,當(dāng)然我們平時(shí)最多用的可能就是獨(dú)干煞赢,哈哈抛计。
策略模式:策略模式針對(duì)一組算法,將每一個(gè)算法封裝到具有共同接口的獨(dú)立的
類中照筑,從而使得它們可以相互替換吹截。策略模式使得算法可以在不影響到客戶端的情況下發(fā)
生變化。策略模式把行為和環(huán)境分開凝危。環(huán)境類負(fù)責(zé)維持和查詢行為類波俄,各種算法在具體的
策略類中提供。由于算法和環(huán)境獨(dú)立開來媒抠,算法的增減弟断,修改都不會(huì)影響到環(huán)境和客戶
端。
14趴生、=TEMPLATE METHOD=
不同的籃球班有不同的老師阀趴,但他們上課的內(nèi)容都是一樣的昏翰,一般都分為運(yùn)球,傳球刘急,投籃棚菊,上籃這么幾堂課,估計(jì)體育師范學(xué)院教書的模版就是這樣叔汁。具體運(yù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)边篮。
15己莺、=OBSERVER=
“今天下午去打籃球啊「杲危”-A
“好啊凌受,到時(shí)叫上我∷急” -B
“也叫上我胜蛉。” -C
“還有我智蝠√诿矗”-D
…
我們班的號(hào)召力可見一斑,呵呵杈湾。
觀察者模式:觀察者模式使觀察者和被觀察者之間的耦合抽象化解虱,被觀察者會(huì)向
所有的登記過的觀察者發(fā)出通知。當(dāng)A要去打籃球時(shí)漆撞,便會(huì)通知B殴泰,C,D…
16浮驳、=ITERATOR=
大一時(shí)上籃球課悍汛,體育老師要清名單:“小王(體育委員),你們班到了多少人至会?”
小王:“立正--离咐,報(bào)數(shù)。”
“1宵蛀,2昆著,3,4术陶,…”
迭代子模式:迭代子模式可以順序訪問一個(gè)聚集中的元素而不必暴露聚集的內(nèi)部
表象凑懂。迭代子模式將迭代邏輯封裝到一個(gè)獨(dú)立的子對(duì)象中,從而與聚集本身隔開梧宫。迭代子
模式簡(jiǎn)化了聚集的界面接谨。每一個(gè)聚集對(duì)象都可以有一個(gè)或一個(gè)以上的迭代子對(duì)象,每一個(gè)
迭代子的迭代狀態(tài)可以是彼此獨(dú)立的塘匣。迭代算法可以獨(dú)立于聚集角色變化脓豪。小王真聰明,
不必查詢?nèi)魏我粋€(gè)人就知道到了多少人馆铁。```
17跑揉、=CHAIN OF RESPONSIBLEITY=
現(xiàn)在湖人隊(duì)進(jìn)攻,佩頓將球交給馬龍埠巨,馬龍?jiān)賯鹘o奧尼爾,奧尼爾一記重扣现拒,湖人再添2分辣垒。
責(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ì)象所接受鹃锈。其實(shí)剛才那個(gè)球,奧尼爾可以再傳給科比來個(gè)空中接力大
風(fēng)車灌籃的瞧预,那就PERFECT了屎债!
18、=COMMAND=
一場(chǎng)關(guān)鍵比賽最后一秒由俺的三分決定了勝負(fù)垢油,不過盆驹,可累壞了俺。
“來杯水滩愁∏”真聽話,我同學(xué)A馬上叫一靚MM給我倒了杯水硝枉。
“背好酸廉丽【胛ⅲ”真聽話,我同學(xué)A馬上又叫那個(gè)靚MM給我錘背雅倒。
“真想洗個(gè)澡璃诀。”真聽話…“等等蔑匣,我不是那個(gè)意思劣欢,哇哇…^¥&#*〔昧迹”
命令模式:命令模式把一個(gè)請(qǐng)求或者操作封裝到一個(gè)對(duì)象中凿将。命令模式把發(fā)出命
令的責(zé)任和執(zhí)行命令的責(zé)任分割開,委派給不同的對(duì)象价脾。命令模式允許請(qǐng)求的一方和發(fā)送
的一方獨(dú)立開來牧抵,使得請(qǐng)求的一方不必知道接收請(qǐng)求的一方的接口,更不必知道請(qǐng)求是怎
么被接收侨把,以及操作是否執(zhí)行犀变,何時(shí)被執(zhí)行以及是怎么被執(zhí)行的。如果早知道那個(gè)命令怎
么執(zhí)行秋柄,俺就不會(huì)說那句話了获枝,嗚嗚…
19、=MEMENTO=
下了一個(gè)NBA小游戲骇笔,里面可以自動(dòng)調(diào)關(guān)省店,但要改注冊(cè)表,當(dāng)然笨触,先找到鍵值“總決賽”懦傍,右鍵,導(dǎo)出為final.reg芦劣,剩下來你就可以隨便改了粗俱,萬一改錯(cuò)了,還可以雙擊final.reg持寄,呵呵源梭。
備忘錄模式:備忘錄對(duì)象是一個(gè)用來存儲(chǔ)另外一個(gè)對(duì)象內(nèi)部狀態(tài)的快照的對(duì)象。
備忘錄模式的用意是在不破壞封裝的條件下稍味,將一個(gè)對(duì)象的狀態(tài)捉住废麻,并與該對(duì)象分離
,存儲(chǔ)起來模庐,從而可以在將來合適的時(shí)候把這個(gè)對(duì)象還原到存儲(chǔ)起來的狀態(tài)烛愧。
20、STATE
今天打球真沒勁,投籃老委掉怜姿。
忽然慎冤,一靚MM走過來… 啊--沧卢,超級(jí)賽亞人第三階蚁堤,變身!
變身之后果然不同凡響但狭,輕松幌過兩個(gè)人披诗,在三個(gè)人的夾擊下出手命中,同時(shí)加罰A⒋拧(呵呵呈队,就會(huì)吹)
狀態(tài)模式:狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變行為。這個(gè)對(duì)象
看上去像是改變了它的類一樣唱歧。狀態(tài)模式需要對(duì)每一個(gè)系統(tǒng)可能取得的狀態(tài)創(chuàng)立一個(gè)狀態(tài)
類的子類宪摧。當(dāng)系統(tǒng)的狀態(tài)變化時(shí),系統(tǒng)實(shí)際改變所選的子類颅崩。當(dāng)一個(gè)對(duì)象行為依賴其所處
狀態(tài)時(shí)几于,就可以考慮用該模式。靚MM沒來時(shí)沿后,狀態(tài)差孩革,導(dǎo)致投籃委。靚MM一來得运,狀態(tài)
奇佳,就是打手也能進(jìn)锅移,哈哈.
21熔掺、=VISITOR=
下學(xué)期籃球課換了個(gè)老師,當(dāng)然非剃,他對(duì)我們?nèi)徊皇熘寐撸谑堑谝还?jié)課他拿著花名冊(cè)找到體育委員小王:“小陳技術(shù)怎樣?”-“一般般备绽,”
“小羅呢券坞?”-“還可以,不過上籃不行肺素『廾”
“小何呢?”-“他啊…”
等等倍靡,俺趕緊咳嗽一聲猴伶。
“他怎么樣?”-“他,他不錯(cuò)不錯(cuò)他挎!” 哈哈筝尾。
“就是投籃老委!”-啊,你這小樣办桨,耍我筹淫。
訪問者模式:訪問者模式的目的是封裝一些施加于某種數(shù)據(jù)結(jié)構(gòu)元素之上的操
作,使得增加新的操作很容易呢撞,一旦這些操作需要修改的話损姜,接受這個(gè)操作的數(shù)據(jù)結(jié)構(gòu)可
以保持不變,比如狸相,老師還可以通過小王得到我們每個(gè)人的身高等薛匪。訪問者模式可以跨過
幾個(gè)類的等級(jí)結(jié)構(gòu)訪問屬于不同的等級(jí)結(jié)構(gòu)的成員類(比迭代子強(qiáng)),但增加一個(gè)新的節(jié)
點(diǎn)就變得很困難脓鹃,如果我們班來了個(gè)新同學(xué)逸尖,小王就沒那么管用了。
22瘸右、=INTERPRETER=
想知道怎么玩出酷呆了的假動(dòng)作么娇跟,我這兒有AND1的經(jīng)典集錦,按照上面練習(xí)就行了太颤。
解釋器模式:給定一個(gè)語(yǔ)言后苞俘,解釋器模式可以定義出其文法的一種表示,并同
時(shí)提供一個(gè)解釋器龄章〕砸ィ客戶端可以使用這個(gè)解釋器來解釋這個(gè)語(yǔ)言中的句子。解釋器模式將
描述怎樣在有了一個(gè)簡(jiǎn)單的文法后做裙,使用模式設(shè)計(jì)解釋這些語(yǔ)句岗憋。在解釋器模式里面提到
的語(yǔ)言是指任何解釋器對(duì)象能夠解釋的任何組合。在解釋器模式中需要定義一個(gè)代表文法
的命令類的等級(jí)結(jié)構(gòu)锚贱,也就是一系列的組合規(guī)則仔戈。每一個(gè)命令對(duì)象都有一個(gè)解釋方法,代
表對(duì)命令對(duì)象的解釋拧廊。命令對(duì)象的等級(jí)結(jié)構(gòu)中的對(duì)象的任何排列組合都是一個(gè)語(yǔ)言监徘。
23、=MEDIATOR=
俺一高中同學(xué)小D到我這兒來玩吧碾,當(dāng)然凰盔,打球是必不可少的。叫上小王就出去K別人滤港,但小D和小王不熟廊蜒,所以幾乎沒什么配合趴拧,結(jié)果被CAI了個(gè)5:0。只好下場(chǎng)“休息”山叮。
小王:“叫你那個(gè)同學(xué)少單干著榴,多傳球∑ň螅”-“OK脑又。”我過去把意見傳給了小D锐借。
小D:“你那個(gè)同學(xué)防守有問題问麸,要盯人,不要盯球钞翔⊙下簦”-“NO PROBLEM〔冀危”我又過去把意見傳給了小王哮笆。
調(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ì)象的相互作用分開處理环揽。