1. 程式人生 > >23種設計模式一語概括

23種設計模式一語概括

      Design Patterns: Elements of Reusable Object-Oriented Software(即後述《設計模式》一書),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。這幾位作者常被稱為“四人組(Gang of Four)”,而這本書也就被稱為“四人組(或 GoF)”書。

      在《設計模式》這本書的最大部分是一個目錄,該目錄列舉並描述了 23 種設計模式。另外,近來這一清單又增加了一些類別,最重要的是使涵蓋範圍擴充套件到更具體的問題型別。例如,Mark Grand 在 Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML(即後述《模式 Java 版》一書)中增加了解決涉及諸如併發等問題的模式,而由 Deepak Alur、John Crupi 和 Dan Malks 合著的 Core J2EE Patterns: Best Practices and Design Strategies 一書中主要關注使用 Java 2 企業技術的多層應用程式上的模式。

      對軟體設計模式的研究造就了一本可能是面向物件設計方面最有影響的書籍:《設計模式》。

GOF的設計模式是一座"橋"

      就Java語言體系來說,GOF的設計模式是Java基礎知識和J2EE框架知識之間一座隱性的"橋"。

      會Java的人越來越多,但是一直徘徊在語言層次的程式設計師不在少數,真正掌握Java中介面或抽象類的應用不是很多,大家經常以那些技術只適合大型專案為由,避開或忽略它們,實際中,Java的介面或抽象類是真正體現Java思想的核心所在,這些你都將在GoF的設計模式裡領略到它們變幻無窮的魔力。

      GoF的設計模式表面上好象也是一種具體的"技術",而且新的設計模式不斷在出現,設計模式自有其自己的發展軌道,而這些好象和J2EE .Net等技術也無關!

實際上,GoF的設計模式並不是一種具體"技術",它講述的是思想,它不僅僅展示了介面或抽象類在實際案例中的靈活應用和智慧,讓你能夠真正掌握介面或抽象類的應用,從而在原來的Java語言基礎上躍進一步,更重要的是,GoF的設計模式反覆向你強調一個宗旨:要讓你的程式儘可能的可重用。

      這其實在向一個極限挑戰:軟體需求變幻無窮,計劃沒有變化快,但是我們還是要尋找出不變的東西,並將它和變化的東西分離開來,這需要非常的智慧和經驗。

      而GoF的設計模式是在這方面開始探索的一塊里程碑。

      J2EE等屬於一種框架軟體,什麼是框架軟體?它不同於我們以前接觸的Java API等,那些屬於Toolkist(工具箱),它不再被動的被使用,被呼叫,而是深刻的介入到一個領域中去,J2EE等框架軟體設計的目的是將一個領域中不變的東西先定義好,比如整體結構和一些主要職責(如資料庫操作事務跟蹤安全等),剩餘的就是變化的東西,針對這個領域中具體應用產生的具體不同的變化需求,而這些變化東西就是J2EE程式設計師所要做的。

     由此可見,設計模式和J2EE在思想和動機上是一脈相承,只不過

      1.設計模式更抽象,J2EE是具體的產品程式碼,我們可以接觸到,而設計模式在對每個應用時才會產生具體程式碼。
      2.設計模式是比J2EE等框架軟體更小的體系結構,J2EE中許多具體程式都是應用設計模式來完成的,當你深入到J2EE的內部程式碼研究時,這點尤其明顯,因此,如果你不具備設計模式的基礎知識(GoF的設計模式),你很難快速的理解J2EE。不能理解J2EE,如何能靈活應用?
      3.J2EE只是適合企業計算應用的框架軟體,但是GoF的設計模式幾乎可以用於任何應用!因此GoF的設計模式應該是J2EE的重要理論基礎之一。

      所以說,GoF的設計模式是Java基礎知識和J2EE框架知識之間一座隱性的"橋"。為什麼說隱性的?

GOF設計模式是一座隱性的"橋"

      因為很多人沒有注意到這點,學完Java基礎語言就直接去學J2EE,有的甚至鴨子趕架,直接使用起Weblogic等具體J2EE軟體,一段時間下來,發現不過如此,挺簡單好用,但是你真正理解J2EE了嗎?你在具體案例中的應用是否也是在延伸J2EE的思想?

      如果你不能很好的延伸J2EE的思想,那你豈非是大炮轟蚊子,認識到J2EE不是適合所有場合的人至少是明智的,但我們更需要將J2EE用對地方,那麼只有理解J2EE此類框架軟體的精髓,那麼你才能真正靈活應用Java解決你的問題,甚至構架出你自己企業的框架來。(我們不能總是使用別人設定好的框架,為什麼不能有我們自己的框架?)

      因此,首先你必須掌握GoF的設計模式。雖然它是隱性,但不是可以越過的。

關於23種設計模式的有趣見解

       作者以輕鬆的語言比喻了java的23種模式,有很好的啟發作用。

        建立型模式
       
        1、FACTORY—追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory
       
        工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何建立及如何向客戶端提供。
       
        2、BUILDER—MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多種語言翻譯機,上面每種語言都有一個按鍵,見到MM我只要按對應的鍵,它就能夠用相應的語言說出“我愛你”這句話了,國外的MM也可以輕鬆搞掂,這就是我的“我愛你”builder。(這一定比美軍在伊拉克用的翻譯機好賣)
       
        建造模式:將產品的內部表象和產品的生成過程分割開來,從而使一個建造過程生成具有不同的內部表象的產品物件。建造模式使得產品內部表象可以獨立的變化,客戶不必知道產品內部組成的細節。建造模式可以強制實行一種分步驟進行的建造過程。
       
        3、FACTORY METHOD—請MM去麥當勞吃漢堡,不同的MM有不同的口味,要每個都記住是一件煩人的事情,我一般採用Factory Method模式,帶著MM到服務員那兒,說“要一個漢堡”,具體要什麼樣的漢堡呢,讓MM直接跟服務員說就行了。
       
        工廠方法模式:核心工廠類不再負責所有產品的建立,而是將具體建立的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的介面,而不接觸哪一個產品類應當被例項化這種細節。
       
        4、PROTOTYPE—跟MM用QQ聊天,一定要說些深情的話語了,我搜集了好多肉麻的情話,需要時只要copy出來放到QQ裡面就行了,這就是我的情話prototype了。(100塊錢一份,你要不要)
       
        原始模型模式:通過給出一個原型物件來指明所要建立的物件的型別,然後用複製這個原型物件的方法創建出更多同類型的物件。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用於任何的等級結構。缺點是每一個類都必須配備一個克隆方法。
       
        5、SINGLETON—俺有6個漂亮的老婆,她們的老公都是我,我就是我們家裡的老公Sigleton,她們只要說道“老公”,都是指的同一個人,那就是我(剛才做了個夢啦,哪有這麼好的事)
       
        單例模式:單例模式確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項單例模式。單例模式只應在有真正的“單一例項”的需求時才可使用。
       
        結構型模式
       
        6、ADAPTER—在朋友聚會上碰到了一個美女Sarah,從香港來的,可我不會說粵語,她不會說普通話,只好求助於我的朋友kent了,他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了(也不知道他會不會耍我)
       
        介面卡(變壓器)模式:把一個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面原因不匹配而無法一起工作的兩個類能夠一起工作。適配類可以根據引數返還一個合適的例項給客戶端。
       
        7、BRIDGE—早上碰到MM,要說早上好,晚上碰到MM,要說晚上好;碰到MM穿了件新衣服,要說你的衣服好漂亮哦,碰到MM新做的髮型,要說你的頭髮好漂亮哦。不要問我“早上碰到MM新做了個髮型怎麼說”這種問題,自己用BRIDGE組合一下不就行了
       
        橋樑模式:將抽象化與實現化脫耦,使得二者可以獨立的變化,也就是說將他們之間的強關聯變成弱關聯,也就是指在一個軟體系統的抽象化和實現化之間使用組合/聚合關係而不是繼承關係,從而使兩者可以獨立的變化。
       
        8、COMPOSITE—Mary今天過生日。“我過生日,你要送我一件禮物。”“嗯,好吧,去商店,你自己挑。”“這件T恤挺漂亮,買,這條裙子好看,買,這個包也不錯,買。”“喂,買了三件了呀,我只答應送一件禮物的哦。”“什麼呀,T恤加裙子加包包,正好配成一套呀,小姐,麻煩你包起來。”“……”,MM都會用Composite模式了,你會了沒有?
       
        合成模式:合成模式將物件組織到樹結構中,可以用來描述整體與部分的關係。合成模式就是一個處理物件的樹結構的模式。合成模式把部分與整體的關係用樹結構表示出來。合成模式使得客戶端把一個個單獨的成分物件和由他們複合而成的合成物件同等看待。
       
  

相關推薦

23設計模式概括

      Design Patterns: Elements of Reusable Object-Oriented Software(即後述《設計模式》一書),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlis

23設計模式介紹()---- 創建型模式

接口 ret static 深復制 return 對象 相互 object c png 由於設計模式篇幅比較大,如果在一篇文章講完所有的設計模式的話不利於閱讀。於是我把它分為三篇文章 23種設計模式介紹(一)---- 創建型模式 23種設計模式介紹(二)---- 結構型模

篇文章學會23設計模式,你需要的全不在這裡

總體來說設計模式分為三大類: 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘

篇文章學會23設計模式,你需要的全不在這裡2

一篇文章學會23種設計模式,你需要的全不在這裡 總體來說設計模式分為三大類: 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 行為型模式,共十一種:策略模式、模板方法模式、

23設計模式全解析-- 設計模式看這篇就夠了

一、設計模式的分類 總體來說設計模式分為三大類: 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 行為型模式,共十一種:策

23設計模式——看遍你就會了10+

建立型1、工廠模式用過switch case吧,他就是最簡單的工廠模式2、抽象工廠模式用過maven吧,當你引用一個jar,他會關聯的給你一系列你需要下載的東西,但是你只需要寫一個配置就OK了,工廠裡面全都處理好了3、單例這個不多講了,一般都寫過,分3種,有空自己練練就好4、

Java經典23設計模式之行為型模式()

行為型設計模式有11種,分別是Chain of Responsibility ( 責任鏈模式 )、Command ( 命令模式 )、Interpreter ( 直譯器模式 ) 、Iterator ( 迭代器模式 )、Mediator ( 中介者模式 ) 、Memento (

如何分鐘記住23設計模式

對於GoF(Gang of Four)的23設計模式對於喜歡軟體程式設計的同志們來說應該都是聽到都會虎軀一震,然後相視一笑或者在心裡冷冷地呵呵一下。我們這裡不談設計模式是什麼,也不談設計模式的好處是什麼,更不談設計模式的程式碼實現,只是想分享下如何快速的對這23種設計模式的

JAVA的23設計模式---代理模式

概要: 該文章參考了《設計模式之禪》一書及一些前輩的部落格文章 1.該文章闡述了代理模式的基礎原理及示例程式碼; 2.該文章適合初學設計模式的技術人員研習; 3.該文章有許多不足之處,請各位大咖

23設計模式介紹以及單例模式的學習

單例模式 餓漢式 23種設計模式 gof23 1、GOF23 設計模式總共分成創建型模式、結構型模式和行為型模式三種: a、創建型模式: - 單例模式、工廠模式、抽象工廠模式、建造者模式、原型模式 b、構建型模式: - 適配器模式、橋接模式、裝配模式、組合模式、建造者模

【Unity與23設計模式】狀態模式(State)

unity public text 開始 sys 狀態模式 改變 val 繼承 定義: “讓一個對象的行為隨著內部狀態的改變而變化,而該對象也像是換了類一樣” 應用場景: 角色AI:控制角色在不同狀態下的AI行為 服務器連接狀態:開始連線、連線中、斷線等狀態 關卡進

轉:23設計模式的應用場景

橋模式 man 16px pop 表示 black strong art bstr 設計模式主要分三個類型:創建型、結構型和行為型。 其中創建型有: 一、Singleton,單例模式:保證一個類只有一個實例,並提供一個訪問它的全局訪問點 ;

【Unity3D與23設計模式】建造者模式(Builder)

產出 private 一個 gof 行為 並且 bstr reac 定義 GoF中定義: “將一個復雜的構建流程與它的對象表現分離出來,讓相同的構建流程可以產生不同的對象行為表現。” 建造者模式可以分為兩個步驟來實施: 1.將復雜的構建流程獨立出來,並將整個流程分成

23設計模式中的叠代器模式

pos over arr imp @override 一個 next() int position 叠代器模式:提供一種方法順序訪問一個聚合對象中的各個對象。 那麽如何提供一個方法順序呢? public interface Iterator<T>{   publ

23設計模式中的訪問者模式

功能需求 封裝 改變 擴展 數據結構 模式 困難 操作 如果 訪問者模式:對於一組對象,在不改變數據結構的前提下,增加作用於這些結構元素新的功能。 適用於數據結構相對穩定,它把數據結構和作用於其上的操作解耦,使得操作集合可以相對自由地演化。 優點: 符合單一職責原則 擴展性

23設計模式中的原型模式

1-1 ... 實例代碼 sets each png 為什麽 .get protect 原型模式:通過復制現有實例來創建新的實例,無須知道相應類的信息。 個人見解:在大量循環時,需要初始化對象,用 原型模式能節省大量的初始化所花費的時間,值得一談的是淺復制和深復制 淺復制:

java 23設計模式

代理 建造者 學習 article 適配器 htm ava arc 叠代 備註這是別人總結的本來想轉載可惜不會怎麽轉載(感謝) 以下是學習過程中查詢的資料,別人總結的資料,比較容易理解(站在各位巨人的肩膀上,望博主勿究) 創建型抽象工廠模式 http://www.cnblo

23設計模式之觀察者模式

主題 一個 server bsp 監聽 images 關系 .com 自動更新 觀察者模式(Observer):定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。 23種設計模式之

23設計模式之抽象工廠模式

tor turn sql數據庫 png insert face sign 相關 reat 抽象工廠模式(Abstract Factory):提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。 package designMode.abstractFa

23設計模式之模板方法模式

技術分享 cnblogs ati strac void package com rim div 模板方法模式(TemplateMethod):定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。