各類設計模式簡介html
各類設計模式之間關係數據庫
不一樣設計模式的對比 設計模式
1、建立型:關注對象建立過程;將對象使用與建立分離,使用對象時無需關心對象建立細節,從而下降系統耦合度,讓設計方案易於修改和擴展;緩存
簡單工廠: 定義一個工廠類,能夠根據輸入的不一樣返回不一樣類的實例。 多線程
工廠方法: 定義一個用於建立對象的接口,讓子類決定實例化哪個類,Factory Method使一個類的實例化延遲到了子類。 框架
具體應用場景:一、日誌記錄器;二、數據庫訪問,當用戶不知道最後系統採用哪一類數據庫,以及數據庫可能有變化時。 jsp
抽象工廠: 提供一個建立一系列相關或相互依賴對象的接口,而無須指定它們的具體類。ui
具體應用場景: 一、QQ 換皮膚,一整套一塊兒換。 二、生成不一樣操做系統的程序。操作系統
單例: 保證一個類只有一個實例,並提供一個訪問它的全局訪問點。線程
具體應用場景:
一、Windows 是多進程多線程的,在操做一個文件的時候,就不可避免地出現多個進程或線程同時操做一個文件的現象,因此全部文件的處理必須經過惟一的實例來進行。
二、一些設備管理器經常設計爲單例模式,好比一個電腦有兩臺打印機,在輸出的時候就要處理不能兩臺打印機打印同一個文件。
原型: 用原型實例指定建立對象的種類,而且經過拷貝這些原型來建立新的對象。
具體應用場景:JAVA 中的 Object clone() 方法。
建造者
具體應用場景:一、去肯德基,漢堡、可樂、薯條、炸雞翅等是不變的,而其組合是常常變化的,生成出所謂的"套餐"。 二、JAVA 中的 StringBuilder。
2、結構型:關注如何將現有類或對象組織在一塊兒造成更強大的結構;
適配器
具體應用場景: 一、美國電器 110V,中國 220V,就要有一個適配器將 110V 轉化爲 220V。 三、在 LINUX 上運行 WINDOWS 程序。 四、JAVA 中的 jdbc。
橋接
具體應用場景: 二、牆上的開關,能夠看到的開關是抽象的,不用管裏面具體怎麼實現的。
組合
具體應用場景:在 JAVA AWT 和 SWING 中,對於 Button 和 Checkbox 是樹葉,Container 是樹枝。
裝飾
具體應用場景:一、孫悟空有 72 變,當他變成"廟宇"後,他的根本仍是一隻猴子,可是他又有了廟宇的功能。
外觀
具體應用場景:一、去醫院看病,可能要去掛號、門診、劃價、取藥,讓患者或患者家眷以爲很複雜,若是有提供接待人員,只讓接待人員來處理,就很方便。
享元
具體應用場景:一、JAVA 中的 String,若是有則返回,若是沒有則建立一個字符串保存在字符串緩存池裏面。 二、數據庫的數據池。
代理
具體應用場景: 一、Windows 裏面的快捷方式。二、買火車票不必定在火車站買,也能夠去代售點。
3、行爲型: 關注系統中對象的交互,研究系統在運行時對象之間的相互通訊與協做,進一步明確對象的職責。
職責鏈
具體應用場景:JS 中的事件冒泡。 三、JAVA WEB 中 Apache Tomcat 對 Encoding 的處理,Struts2 的攔截器,jsp servlet 的 Filter。
命令
具體應用場景:struts 1 中的 action 核心控制器 ActionServlet 只有一個,至關於 Invoker,而模型層的類會隨着不一樣的應用有不一樣的模型類,至關於具體的 Command。
解釋器
具體應用場景:編譯器、運算表達式計算。
迭代
具體應用場景:JAVA 中的 iterator。
中介者
具體應用場景:機場調度系統;MVC 框架,其中C(控制器)就是 M(模型)和 V(視圖)的中介者。
備忘錄
具體應用場景:
觀察者
具體應用場景:一、拍賣的時候,拍賣師觀察最高標價,而後通知給其餘競價者競價。
狀態
具體應用場景: 一、打籃球的時候運動員能夠有正常狀態、不正常狀態和超常狀態。 二、曾侯乙編鐘中,'鍾是抽象接口','鍾A'等是具體狀態,'曾侯乙編鐘'是具體環境(Context)。
策略
具體應用場景: 一、諸葛亮的錦囊妙計,每個錦囊就是一個策略。 二、旅行的出遊方式,選擇騎自行車、坐汽車,每一種旅行方式都是一個策略。 三、JAVA AWT 中的 LayoutManager。
模板方法
具體應用場景:一、在造房子的時候,地基、走線、水管都同樣,只有在建築的後期纔有加壁櫥加柵欄等差別。
訪問者
具體應用場景:您在朋友家作客,您是訪問者,朋友接受您的訪問,您經過朋友的描述,而後對朋友的描述作出一個判斷,這就是訪問者模式。