我又找了其他模式,都列出來了。
======================
Java的常見設計模式
創新模式
1,工廠—追完MM請吃飯。麥當勞和肯德基的雞翅都是MM們的最愛。雖然口味不壹樣,但是不管妳帶MM去麥當勞還是肯德基,只要對服務員說“四個雞翅”就可以了。麥當勞和肯德基是生產雞翅的工廠。
工廠模式:客戶類和工廠類是分開的。消費者任何時候需要壹個產品,問廠家就行了。消費者可以接受不加修改的新產品。缺點是修改產品時,工廠類也要相應修改。比如:如何創建,如何提供給客戶端。
2.建設者-MM最喜歡聽到“我愛妳”這句話。在異地遇到MM,應該可以用他們的方言跟她說這句話。哦,我有壹個多語言翻譯器,每種語言都有壹個按鈕。遇到MM,只需要按下相應的按鈕,它就能用相應的語言說“我愛妳”,外國MM也能輕松搞定。這是我的。這肯定比美軍在伊拉克用的翻譯機強。
構造模式:將產品的內部表示從產品的生成過程中分離出來,使得壹個構造過程可以生成具有不同內部表示的產品對象。構造模式使產品的內部外觀能夠自主變化,客戶不需要知道產品內部構成的細節。構建模式可以強制壹步壹步的構建過程。
3.工廠法——邀請MM去麥當勞吃漢堡。不同的mm口味不同,要記住每個人很煩。我壹般采用工廠法模式,帶MM去找服務員說“我要壹個漢堡”。讓MM直接告訴服務員她想要什麽樣的漢堡。
工廠方法模式:核心工廠類不再負責所有產品的創建,而是將具體的創建工作交給子類,成為壹個抽象的工廠角色,只負責給出具體工廠類必須實現的接口,而不觸及具體應該實例化哪個產品類的細節。
4.原型——在QQ上和MM聊天的時候,壹定要說壹些深情的話。我收集了很多惡心的情話,有需要的時候就抄出來放到QQ裏。這是我的原型。(100元每個,要不要?)
原始模型模式:通過給定壹個原型對象來指明要創建的對象的類型,然後通過復制這個原型對象來創建更多同類型的對象。原始模型模式允許動態增加或減少產品類別。產品類別不需要有任何預先確定的層次結構,原始模型模式適用於任何層次結構。缺點是每個類都必須配備壹個克隆方法。
5.單身——我有六個漂亮的妻子。她們的老公都是我。我是我們的丈夫西格頓。只要說“老公”,都是指同壹個人,那就是我(我剛做了個夢,怎麽會有這種好事)。
Singleton模式:singleton模式保證壹個類只有壹個實例,並且自己實例化它,把這個實例singleton模式提供給整個系統。只有當存在真正的“單壹實例”需求時,才應該使用單例模式。
結構模型
6.ADAPTER——在朋友聚會上認識了壹位來自香港的美女Sarah,但是我不會說粵語,她也不會說普通話,所以我只好求助於我的朋友kent。作為我和莎拉之間的適配器,我和莎拉可以互相對話(不知道他會不會忽悠我)。
適配器(transformer)模式:將壹個類的接口轉換成客戶端期望的另壹個接口,這樣兩個因為接口不匹配而無法協同工作的類就可以協同工作。適配類可以根據參數向客戶端返回合適的實例。
7.橋——如果早上遇到MM,要說早安;如果晚上遇到MM,要說晚上好;遇到穿新衣服的MM,要說衣服好看。遇到MM的新發型,要說頭發好看。不要問我“今天早上遇到換了新發型的MM妳說什麽?”把它和橋牌結合起來就好了。
橋接模式:將抽象和實現解耦,使它們能夠獨立變化,即把它們之間的強相關性變成弱相關性,即在壹個軟件系統的抽象和實現之間用組合/聚合關系代替繼承關系,使它們能夠獨立變化。
今天是瑪麗的生日。"妳應該送我壹份生日禮物。"“嗯,好吧,妳自己去店裏選吧。”“這t恤好看,買吧,這裙子好看,買吧,這包也不錯,買吧。”“嘿,我買了三件。我只答應送壹件禮物。”“什麽?t恤、裙子和包包是完美的搭配。小姐,請包起來。”"...",MM可以用復合模式,妳學會了嗎?
組合模式(Composition mode):組合模式將對象組織成樹形結構,可以用來描述整體與部分之間的關系。復合模式是處理對象的樹形結構的模式。綜合模型以樹形結構顯示部分與整體的關系。組合模式使客戶端能夠將單個組件對象視為由它們組成的復合對象。
9.DECORATOR—Mary的生日輪到Sarly了,不要讓她自己選,不然這個月夥食費肯定過不去。把我去年在華山頂上拍的照片拿出來,在背面寫上“最好的禮物是有愛的Fita”,然後去街邊的禮品店買個相框(賣禮物的MM也很漂亮),再找隔壁搞美術設計的Mike設計壹個漂亮的盒子放進去...
裝飾模式(Decorator pattern ):裝飾模式以對客戶端透明的方式擴展了對象的功能,這是繼承關系的壹種替代方式,比繼承提供了更多的靈活性。動態地向壹個對象添加函數,並且這些函數可以被動態地撤銷。加上壹些基本功能的排列組合所產生的非常大量的功能。
10,門面——我有壹臺專業的尼康相機,喜歡自己手動調節光圈和快門,這樣拍出來的照片才專業,但是MM不懂這些東西,甚至教了很久之後。好在相機有立面設計模式。把相機調到自動模式,對準目標按快門就行了。壹切都是相機自動調節,讓MM用這個相機給我拍壹張。
門面模式:與子系統的外部通信必須通過統壹的門面對象進行。facade模式提供了壹個高級接口,使得子系統更易於使用。每個子系統只有壹個facade類,並且這個facade類只有壹個實例,也就是說,它是壹個singleton模式。但是整個系統可以有多個facade類。
11,FLYWEIGHT——每天給MM發短信,手指都快累死了。最近買了新手機,可以在手機裏存壹些常用的句子。想用的時候可以直接拿出來,在前面加上MM的名字就發了,不用壹個字壹個字的打。* * *享受的句子是Flyweight,MM的名字是提取的外部特征,根據上下文使用。
享受模式:輕量級是指拳擊中最輕的量級。元共享模式以* * *共享方式高效支持大量細粒度對象。元享受模式中* * *享受的關鍵是區分內在狀態和外在狀態。內在狀態儲存在享受元素中,不會隨著環境的變化而不同。外在狀態隨著環境的變化而變化。外在狀態不能影響內在狀態,它們是相互獨立的。把* * *能享受的狀態和* * *不能享受的狀態從常規類中區分出來,把* * *不能享受的狀態從類中排除。客戶端不能直接創建* * * *享受的對象,應該使用壹個工廠對象來創建* * * *享受的對象。享受元模式大大減少了內存中的對象數量。
12,代理——在網上和MM聊天總是以“妳好,妳好”和“妳是哪裏人”開頭“妳多大了?”“有多高?”這些話真的很討厭。寫壹個程序作為我的代理。當妳收到這些話的時候,妳可以設置壹個自動回答,當妳收到其他話的時候通知我。怎麽樣?酷斃了。
代理模式:代理模式為壹個對象提供壹個代理對象,代理對象控制對源對象的引用。代理是指壹個人或壹個組織代表另壹個人或另壹個組織行事。在某些情況下,客戶端不想或者不能直接引用壹個對象,代理對象可以直接充當客戶端和目標對象之間的中介。客戶端無法區分代理主題對象和真實主題對象。代理模式可能不知道真實的代理對象,而只持有代理對象的壹個接口。此時,代理對象不能創建代理對象,代理對象必須由系統中的其他角色創建並傳入。
行為模式
13,責任鏈--晚上去上英語課,為了脫身坐在最後壹排。哇,前面坐著好幾個漂亮的MM。找張紙條,寫上“嗨,妳能做我女朋友嗎?如果不願意,請轉發”,筆記會壹壹傳下去。哦,不對,第壹排的MM把紙條遞給了老師。聽說是個老處女。快跑!
責任鏈模式:在責任鏈模式中,許多對象通過每個對象對其下壹個主目錄的引用來連接。
站起來形成壹條鏈。請求沿著這個鏈傳遞,直到鏈中的壹個對象決定處理該請求。客戶端不知道鏈中的哪個對象將最終處理這個請求,系統可以動態地重組鏈並分配責任,而不會影響客戶端。處理者有兩個選擇:承擔責任或者傳給下壹個家庭。壹個請求可能最終不被任何接收者對象接受。
14,COMMAND————我有壹個MM,家裏管的很嚴,不能見面,要在哥哥的幫助下在我們之間發消息。如果她有什麽指示給我,她會寫個便條讓她哥哥帶給我。不,她哥哥發了另壹個命令。為了感謝他,我請他吃了壹碗雜醬面。我不知道他說:“我同時給我姐的三個男朋友發了命令,所以妳在請我吃面之前,先算算妳的火氣。”,:-(
命令模式:命令模式將請求或操作封裝到壹個對象中。命令模式將發出命令的責任與執行命令的責任分開,並將它們委托給不同的對象。命令模式允許請求方和發送方獨立,這樣請求方就不需要知道接收方的接口,更不用說請求是怎麽收到的,操作是否執行,何時執行,如何執行。系統支持命令撤銷。
15,講解員——我有泡MM的真經,裏面有泡MM的各種攻略,比如吃西餐的步驟,去看電影的方法。和MM約會的時候,做個翻譯,照著上面的劇本來就行了。
解釋器模式:給定壹種語言,解釋器模式可以定義其語法的表示,同時提供壹個解釋器。客戶可以使用這個解釋器來解釋這種語言的句子。解釋器模式將描述在擁有簡單的語法之後,如何使用模式設計來解釋這些語句。解釋器模式中提到的語言是指任何解釋器對象都可以解釋的任何組合。在解釋器模式下,需要定義壹個表示語法的命令類的層次結構,即壹系列組合規則。每個命令對象都有壹個解釋方法,表示對命令對象的解釋。命令對象層次結構中對象的任何排列組合都是壹種語言。
16,叠代器——我愛上了瑪麗,不顧壹切向她求婚。
瑪麗:“如果妳想讓我嫁給妳,妳必須同意我的條件。”
我:“我什麽都答應,妳說就是了。”
瑪麗:“我迷戀上了那顆壹克拉的鉆石。”
我:“我買,我買,還要什麽?”
瑪麗:“我看上了湖邊的別墅。”
我:“我買,我買,還要什麽?”
瑪麗:“妳的陰莖壹定有50厘米長。”
我的頭嗡嗡作響,我坐在椅子上,咬緊牙關:“我切,我切,還有嗎?”
……
叠代子模式:叠代子模式可以順序訪問聚合中的元素,而不會暴露聚合的內部外觀。多個對象形成的集合稱為聚合,聚合對象是可以包含壹組對象的容器對象。叠代子模式將叠代邏輯封裝到壹個獨立的子對象中,它與聚合本身是分離的。叠代子模式簡化了聚合的接口。每個聚合對象可以有壹個或多個叠代子對象,每個叠代的叠代狀態可以相互獨立。叠代算法可以獨立於聚合角色改變。
17,調解員————四個mm打麻將,分不清誰該給誰多少錢。還好當時我在,按照他們的籌碼數錢,賺錢的從我這拿走,賠錢的賠我,壹切都還行。我有四部MM手機。
中介模式(Mediator mode):中介模式封裝了壹系列對象交互的方式,這樣這些對象就不必明顯地相互交互。以便它們可以松散耦合。當壹些對象之間的交互發生變化時,不會立即影響其他對象之間的交互。確保這些效果可以相互獨立地改變。中介模型將多對多交互轉化為壹對多交互。中介器模型抽象了對象的行為和協作,在小規模行為中單獨處理對象和其他對象之間的交互。
18,MEMENTO——同時和幾個MM聊天的時候,壹定要記得清楚妳剛剛對MM說了什麽,不然MM發現了會不高興的。還好我有備忘錄,把剛才對哪個MM說的話都抄下來放在備忘錄裏存儲,方便隨時查看之前的記錄。
Memento模式:memo對象是用於存儲另壹個對象內部狀態快照的對象。Memento模式的目的是在不破壞封裝的情況下捕獲對象的狀態,將其外部化並存儲,以便該對象可以在未來的適當時間恢復到存儲的狀態。
19,觀察者————想了解我公司最新MM信息?加入公司的MM信息郵箱群就可以了。湯姆負責收集信息。他發現的新信息發布到郵件群裏,不需要壹個壹個通知我們,這樣我們作為訂閱者(觀察者)就能及時收到信息。
觀察者模式:觀察者模式定義了多依賴關系,允許多個觀察者對象同時監控壹個主題對象。當這個主題對象的狀態改變時,所有的觀察者對象都會得到通知,這樣它們就可以自動更新自己。
20.狀態——和MM交往,壹定要註意她的狀態。她的行為在不同的州會有所不同。比如妳今晚請她看電影,對妳不感興趣的MM會說“有事”,而不討厭妳但還沒喜歡過妳的MM會說“好吧,但妳能帶上我同事嗎?”,已經喜歡上妳的MM會說“什麽時候?看完電影去酒吧怎麽樣?”當然,如果妳在看電影的過程中做得好,也可以讓MM的狀態從不喜歡變成喜歡。
狀態模式:狀態模式允許對象在其內部狀態改變時改變其行為。這個對象看起來好像已經改變了它的類。狀態模式將被研究對象的行為包裝在不同的狀態對象中,每個狀態對象都屬於壹個抽象狀態類的子類。狀態模式的目的是當對象的內部狀態改變時,使對象的行為改變。state模式需要為系統的每個可能狀態創建state類的子類。當系統狀態改變時,系統會改變所選的子類。
21,策略————和不同類型的MM約會需要不同的策略。有的請電影,有的吃零食,有的去海邊浪漫。單壹的目的就是為了討MM歡心。我的MM追包裏有很多攻略。
策略模式(Policy pattern):策略模式是針對壹組算法的,每個算法都封裝成壹個獨立的類,具有相同的接口,使得它們可以互相替換。策略模式使算法能夠在不影響客戶端的情況下進行更改。戰略模型將行為與環境分開。環境類負責維護和查詢行為類,具體策略類提供各種算法。因為算法和環境是獨立的,所以算法的增減和修改不會影響環境和客戶端。
22.模板法——妳看過經典文章《如何勸女生上床》嗎?女生上床不變的步驟分為八個模板法:萍水相逢、打破僵局、追求、接吻、前戲、動手、愛撫、進去,但每個步驟根據不同情況有不同的方法,看妳的即興發揮(具體實現);
模板方法模式:模板方法模式準備壹個抽象類,以具體方法和具體構造函數的形式實現壹些邏輯,然後聲明壹些抽象方法強制子類實現其余邏輯。不同的子類可以用不同的方式實現這些抽象方法,從而對剩余的邏輯有不同的實現。先做壹個頂層的邏輯框架,邏輯的細節留給具體的子類去實現。
23.VISITOR—情人節到了,我想給每個MM送壹束花,壹張卡片,但是每個MM送的花要根據她個人的特點,每張卡片要根據她的個人特點來選擇。我怎樣才能自己發現?我最好請花店老板和禮品店老板做個拜訪,這樣花店老板可以根據MM的特點選壹束花,禮品店老板也可以根據每個人的特點選壹張卡片,這樣會容易很多。
訪問者模式:訪問者模式的目的是封裝壹些強加在壹些數據結構元素上的操作。壹旦這些操作需要修改,接受這個操作的數據結構可以保持不變。訪問者模式適用於數據結構相對不確定的系統,將數據結構與作用於該結構的操作解耦,使操作集可以相對自由地進化。訪問者模式很容易添加壹個新的操作,就是添加壹個新的訪問者類。visitor模式將相關的行為集中在壹個visitor對象中,而不是分散到單獨的節點類中。當使用visitor模式時,應該將盡可能多的對象瀏覽邏輯放在visitor類中,而不是放在它的子類中。訪問者模式可以跨幾個類層次結構訪問屬於不同層次結構的成員類。