四巨頭23種設(shè)計(jì)模式的意圖

了解設(shè)計(jì)模式的意圖,是在代碼重構(gòu)中浮現(xiàn)并識(shí)別設(shè)計(jì)模式的關(guān)鍵吱涉。
本文將四巨頭在《設(shè)計(jì)模式》一書(shū)的23種設(shè)計(jì)模式的意圖放在一個(gè)頁(yè)面里功咒,方便查閱孙技。四巨頭把這23種設(shè)計(jì)模式按照創(chuàng)建倍谜、結(jié)構(gòu)忍饰、行為分為三類卡辰。

創(chuàng)建(1. 抽象工廠蛆橡、2. 建造者钠右、3. 工廠方法赋元、4. 原型、5. 單例)

  1. 抽象工廠
    Intent意圖:Provide an interface for creatingfamilies of related or dependent objects without specifying their concreteclasses. 提供一個(gè)接口飒房,來(lái)創(chuàng)建一些彼此相關(guān)或依賴的對(duì)象族搁凸,而無(wú)須指定其具體的類。


    Abstract Factory抽象工廠
  2. 建造者
    Intent意圖:Separate the construction of acomplex object from its representation so that the same construction processcan create different representations. 將一個(gè)復(fù)雜對(duì)象的構(gòu)造與其表現(xiàn)形式進(jìn)行分離狠毯,使得同樣的構(gòu)造過(guò)程能創(chuàng)建出不同的表現(xiàn)形式护糖。


    Builder建造者
  3. 工廠方法
    Intent意圖:Define an interface for creatingan object, but let subclasses decide which class to instantiate. Factory Methodlets a class defer instantiation to subclasses. 定義一個(gè)用于創(chuàng)建一個(gè)對(duì)象的接口,但讓子類來(lái)決定具體實(shí)例化哪個(gè)類嚼松。工廠方法模式能讓一個(gè)類將實(shí)例化的工作延遲到各個(gè)子類中來(lái)進(jìn)行嫡良。


    Factory Method工廠方法
  4. 原型
    Intent意圖:Specify the kinds of objects tocreate using a prototypical instance, and create new objects by copying thisprototype. 使用一個(gè)原型實(shí)例來(lái)指定所要?jiǎng)?chuàng)建的對(duì)象的類型,并通過(guò)復(fù)制該原型來(lái)創(chuàng)建新的對(duì)象献酗。


    Prototype原型
  5. 單例
    Intent意圖:Ensure a class only has oneinstance, and provide a global point of access to it. 確保一個(gè)類僅有一個(gè)實(shí)例寝受,并提供一個(gè)對(duì)其進(jìn)行訪問(wèn)的全局訪問(wèn)點(diǎn)。


    Singleton單例

結(jié)構(gòu)(1. 適配器罕偎、2. 橋接很澄、3. 組合、4. 裝飾器锨亏、5. 門(mén)面痴怨、6. 輕量級(jí)忙干、7. 代理)

  1. 適配器
    Intent意圖:Convert the interface of a classinto another interface clients expect. Adapter lets classes work together thatcouldn't otherwise because of incompatible interfaces. 將一個(gè)類的接口轉(zhuǎn)換成其客戶端所期望的另一個(gè)接口器予。適配器模式能讓以前因?yàn)榻涌诓患嫒荻鵁o(wú)法協(xié)同工作的一些類可以在一起工作。


    Adapter適配器
  2. 橋接
    Intent意圖:Decouple an abstraction from its implementation so that the two can vary independently. 將一個(gè)抽象與其實(shí)現(xiàn)解耦合捐迫,使得兩者能夠獨(dú)立地發(fā)生改變乾翔。


    Bridge橋接
  3. 組合
    Intent意圖:Compose objects into treestructures to represent part-whole hierarchies. Composite lets clients treatindividual objects and compositions of objects uniformly. 將若干對(duì)象組合成樹(shù)的結(jié)構(gòu),來(lái)表示“部分-整體”的層次結(jié)構(gòu)施戴。組合模式讓客戶端能統(tǒng)一地對(duì)待單個(gè)對(duì)象和對(duì)象的復(fù)合體反浓。


    Composite組合
  4. 裝飾器
    Intent意圖:Attach additionalresponsibilities to an object dynamically. Decorators provide a flexiblealternative to subclassing for extending functionality. 為一個(gè)對(duì)象動(dòng)態(tài)地附加額外的職責(zé)。除了子類化這個(gè)方案以外赞哗,裝飾器模式為擴(kuò)展代碼功能提供了另一個(gè)靈活的備選方案雷则。


    Decorator裝飾器
  5. 門(mén)面
    Intent意圖:Provide a unified interface to aset of interfaces in a subsystem. Facade defines a higher-level interface thatmakes the subsystem easier to use. 為一個(gè)子系統(tǒng)中的一系列接口提供一個(gè)統(tǒng)一的接口。門(mén)面模式定義了一個(gè)更高層次的接口肪笋,而令該子系統(tǒng)使用起來(lái)更加容易月劈。


    Facade門(mén)面
  6. 輕量級(jí)
    Intent意圖:Use sharing to support largenumbers of fine-grained objects efficiently. 使用共享來(lái)有效地支持巨大數(shù)量的細(xì)粒度的對(duì)象的使用度迂。


    Flyweight輕量級(jí)
  7. 代理
    Intent意圖:Provide a surrogate orplaceholder for another object to control access to it. 為另一個(gè)對(duì)象提供一個(gè)代理或占位者,來(lái)控制對(duì)該對(duì)象的訪問(wèn)猜揪。


    Proxy代理

行為(1. 責(zé)任鏈惭墓、2. 命令、3. 翻譯器而姐、4. 迭代器腊凶、5. 中介者、6. 紀(jì)念品拴念、7. 觀察者钧萍、8. 狀態(tài)、9. 策略政鼠、10. 模版方法划煮、11. 訪問(wèn)者)

  1. 責(zé)任鏈
    Intent意圖:Avoid coupling the sender of arequest to its receiver by giving more than one object a chance to handle therequest. Chain the receiving objects and pass the request along the chain untilan object handles it. 通過(guò)讓多個(gè)對(duì)象各自有一次機(jī)會(huì)來(lái)處理一個(gè)請(qǐng)求的方式,來(lái)避免將一個(gè)請(qǐng)求的發(fā)送者與其接受者相耦合缔俄。將各個(gè)接收該請(qǐng)求的對(duì)象鏈接起來(lái)弛秋,并將該請(qǐng)求沿著這個(gè)鏈條傳遞下去,直到有一個(gè)對(duì)象處理了該請(qǐng)求為止俐载。


    Chain of Responsibility責(zé)任鏈
  2. 命令
    Intent意圖:Encapsulate a request as anobject, thereby letting you parameterize clients with different requests, queueor log requests, and support undoable operations. 以一個(gè)對(duì)象的形式封裝一個(gè)請(qǐng)求蟹略,從而能用不同請(qǐng)求來(lái)對(duì)客戶端進(jìn)行參數(shù)化,將請(qǐng)求進(jìn)行排隊(duì)或記錄日志遏佣,并支持可撤銷(xiāo)的操作挖炬。


    Command命令
  3. 翻譯器
    Intent意圖:Given a language, define arepresention for its grammar along with an interpreter that uses therepresentation to interpret sentences in the language. 給定一種語(yǔ)言,針對(duì)其語(yǔ)法定義一個(gè)表示形式状婶,并提供一個(gè)能使用該表示形式的翻譯器意敛,來(lái)翻譯這種語(yǔ)言的語(yǔ)句。


    Interpreter翻譯者
  4. 迭代器
    Intent意圖:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一種方法來(lái)順序訪問(wèn)一個(gè)聚合對(duì)象的各個(gè)元素膛虫,而無(wú)須暴露該對(duì)象的底層表示草姻。


    Iterator迭代器
  5. 中介者
    Intent意圖:Define an object thatencapsulates how a set of objects interact. Mediator promotes loose coupling bykeeping objects from referring to each other explicitly, and it lets you varytheir interaction independently. 定義了一個(gè)對(duì)象,來(lái)將一系列對(duì)象之間如何進(jìn)行交互進(jìn)行封裝稍刀。中介者模式能通過(guò)讓這些對(duì)象免于顯式地相互進(jìn)行引用而促進(jìn)松耦合撩独,并能夠做到獨(dú)立地去改變這些對(duì)象之間的交互。


    Mediator中介者
  6. 紀(jì)念品
    Intent意圖:Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later. 在不破壞封裝的前提下账月,將一個(gè)對(duì)象的內(nèi)部狀態(tài)進(jìn)行捕獲并外部化综膀,使得該對(duì)象能夠在以后被恢復(fù)到這個(gè)內(nèi)部狀態(tài)。


    Memento紀(jì)念品
  7. 觀察者
    Intent意圖:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 在若干對(duì)象之間定義一個(gè)一對(duì)多的依賴關(guān)系局齿,使得當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí)剧劝,其所有的依賴者都被通知并被自動(dòng)更新。


    Observer觀察者
  8. 狀態(tài)
    Intent意圖:Allow an object to alter itsbehavior when its internal state changes. The object will appear to change itsclass. 當(dāng)一個(gè)對(duì)象的內(nèi)部狀態(tài)改變時(shí)抓歼,允許該對(duì)象相應(yīng)地改變其行為讥此。這樣該對(duì)象看起來(lái)好像改變了其所屬的類示绊。


    State狀態(tài)
  9. 策略
    Intent意圖:Define a family of algorithms,encapsulate each one, and make them interchangeable. Strategy lets thealgorithm vary independently from clients that use it. 定義一個(gè)算法族,對(duì)每一個(gè)算法進(jìn)行封裝暂论,并令其能夠?qū)崿F(xiàn)互換面褐。策略模式能讓算法獨(dú)立于那些使用它的客戶端而發(fā)生變化。


    Strategy策略
  10. 模版方法
    Intent意圖:Define the skeleton of analgorithm in an operation, deferring some steps to subclasses. Template Methodlets subclasses redefine certain steps of an algorithm without changing thealgorithm's structure. 定義一個(gè)操作中的算法的骨架取胎,并將其中一些步驟延遲到若干子類中去執(zhí)行展哭。模板方法模式能讓這些子類重新定義一個(gè)算法的某些步驟,而無(wú)須改變?cè)撍惴ǖ慕Y(jié)構(gòu)闻蛀。


    Template Method模板方法
  11. 訪問(wèn)者
    Intent意圖:Represent an operation to beperformed on the elements of an object structure. Visitor lets you define a newoperation without changing the classes of the elements on which it operates. 用來(lái)表示即將要施加到一個(gè)對(duì)象結(jié)構(gòu)的各個(gè)元素之上的一個(gè)操作匪傍。訪問(wèn)者模式能用來(lái)定義一個(gè)新的操作,而無(wú)須改變其所操作的上述各個(gè)元素所屬的類觉痛。


    Visitor訪問(wèn)者
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末役衡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子薪棒,更是在濱河造成了極大的恐慌手蝎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俐芯,死亡現(xiàn)場(chǎng)離奇詭異棵介,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吧史,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)邮辽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贸营,你說(shuō)我怎么就攤上這事吨述。” “怎么了钞脂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵揣云,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我芳肌,道長(zhǎng)灵再,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任亿笤,我火速辦了婚禮,結(jié)果婚禮上栋猖,老公的妹妹穿的比我還像新娘净薛。我一直安慰自己,他們只是感情好蒲拉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布肃拜。 她就那樣靜靜地躺著痴腌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燃领。 梳的紋絲不亂的頭發(fā)上士聪,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音猛蔽,去河邊找鬼剥悟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛曼库,可吹牛的內(nèi)容都是我干的区岗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼毁枯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慈缔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起种玛,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤藐鹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后赂韵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體教藻,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年右锨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了括堤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绍移,死狀恐怖悄窃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹂窖,我是刑警寧澤轧抗,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瞬测,受9級(jí)特大地震影響横媚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜月趟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一灯蝴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孝宗,春花似錦穷躁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猿诸。三九已至,卻和暖如春狡忙,著一層夾襖步出監(jiān)牢的瞬間梳虽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工灾茁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窜觉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓删顶,卻偏偏與公主長(zhǎng)得像竖螃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逗余,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355