今天上課的時候,王老師問咱們什麼是設計模式?當時咱們並無回答上來,設計模式對於咱們瞭解架構來講很重要,因而就有了此次的做業。算法
「設計模式是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結,使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼的可靠性。」這是設計模式上對於設計模式的定義,咱們最經常使用的設計模式一共有23種,根據其目的能夠把它們分紅建立型、結構型和行爲型三種。建立型模式主要用於建立對象,分別有工廠方法模式、抽象工廠模式、建造者模式、原型模式和單例模式。結構型模式主要用於處理類或對象的組合,包括適配器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式和代理模式。行爲型模式主要是用於描述對類或對象怎樣交互和怎樣分配職責,包括職責鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模板方法模式和訪問者模式。spring
1.工廠方法模式數據庫
核心類再也不負責方法的建立,而是把具體的建立工做交給子類去作,即核心類只是提供方法的接口,不負責方法的實例化,這使得工廠方法模式能夠許可系統在不修改核心類的狀況下添加子類就能夠引進新的工做。設計模式
2.抽象工廠模式數據結構
這種模式建立一組相關或相互依賴的對象提供一個接口,並且無需指定他們的具體類,提供了一個公共的接口,隔離了具體類的生成,使得客戶並不須要知道什麼被建立,因爲這種隔離使得具體類的更換更加的靈活。架構
3.建造者模式函數
建造者模式將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。通常有四種類:設計
產品類:通常是一個較爲複雜的對象,也就是說建立對象的過程比較複雜,通常會有比較多的代碼量。
抽象建造者:引入抽象建造者的目的,是爲了將建造的具體過程交與它的子類來實現。這樣更容易擴展。通常至少會有兩個抽象方法,一個用來建造產品,一個是用來返回產品。
建造者:實現抽象類的全部未實現的方法,具體來講通常是兩項任務:組建產品;返回組建好的產品。
導演類:負責調用適當的建造者來組建產品,導演類通常不與產品類發生依賴關係,與導演類直接交互的是建造者類。通常來講,導演類被用來封裝程序中易變的部分。代理
4.原型模式對象
原型實例指定建立對象的種類,並經過拷貝這些原型建立新的對象。原型模式是一種比較簡單的模式,也很是容易理解,實現一個接口,重寫一個方法即完成了原型模式。
5.單例模式
確保一個類只有一個實例,並且自行實例化並向整個系統提供這個實例。
單例模式應該是23種設計模式中最簡單的一種模式了。單例模式根據實例化對象時機的不一樣分爲兩種:一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被加載時候,就實例化一個對象交給本身的引用;而懶漢式在調用取得實例方法的時候纔會實例化對象。
6.適配器模式
適配器模式將某個類的接口轉換成客戶端指望的另外一個接口表示,目的是消除因爲接口不匹配所形成的類的兼容性問題。主要分爲三類:類的適配器模式、對象的適配器模式、接口的適配器模式。
7.橋接模式
橋接模式就是把事物和其具體實現分開,使他們能夠各自獨立的變化。橋接的用意是:將抽象化與實現化解耦,使得兩者能夠獨立變化,像咱們經常使用的JDBC橋DriverManager同樣,JDBC進行鏈接數據庫的時候,在各個數據庫之間進行切換,基本不須要動太多的代碼,甚至絲絕不用動,緣由就是JDBC提供統一接口,每一個數據庫提供各自的實現,用一個叫作數據庫驅動的程序來橋接就好了。
8.裝飾模式
須要擴展一個類的功能,或給一個類增長附加責任須要動態地給一個對象增長功能,這些功能能夠再動態地撤銷。須要增長由一些基本功能的排列組合而產生的很是大量的功能,從而使繼承關係變得不現實。
9.代理模式
其實每一個模式名稱就代表了該模式的做用,代理模式就是多一個代理類出來,替原對象進行一些操做,好比咱們在租房子的時候回去找中介,爲何呢?由於你對該地區房屋的信息掌握的不夠全面,但願找一個更熟悉的人去幫你作,此處的代理就是這個意思。
10.外觀模式
外觀模式是爲了解決類與類之家的依賴關係的,像spring同樣,能夠將類和類之間的關係配置到配置文件中,而外觀模式就是將他們的關係放在一個Facade類中,下降了類類之間的耦合度,該模式中沒有涉及到接口。
11.組合模式
組合模式有時又叫部分-總體模式在處理相似樹形結構的問題時比較方便,將多個對象組合在一塊兒進行操做,經常使用於表示樹形結構中,例如二叉樹,數等。
12.享元模式
享元模式的主要目的是實現對象的共享,即共享池,當系統中對象多的時候能夠減小內存的開銷,一般與工廠模式一塊兒使用。
13.策略模式
策略模式定義了一系列算法,並將每一個算法封裝起來,使他們能夠相互替換,且算法的變化不會影響到使用算法的客戶。須要設計一個接口,爲一系列實現類提供統一的方法,多個實現類實現該接口,設計一個抽象類(無關緊要,屬於輔助類),提供輔助函數。
14.模板方法模式
一個抽象類中,有一個主方法,再定義1...n個方法,能夠是抽象的,也能夠是實際的方法,定義一個類,繼承該抽象類,重寫抽象方法,經過調用抽象類,實現對子類的調用。
15.觀察者模式
就是消息訂閱--發佈模式。原本原始的情況是須要在觀察者類內部設置須要通知的對象。結果如今出現了事件。定義委託來通知其餘對象,顯得更簡潔。
16.迭代器模式
顧名思義,迭代器模式就是順序訪問彙集中的對象,通常來講,集合中很是常見,若是對集合類比較熟悉的話,理解本模式會十分輕鬆。這句話包含兩層意思:一是須要遍歷的對象,即彙集對象,二是迭代器對象,用於對彙集對象進行遍歷訪問。
17.職責鏈模式
就是一個將請求或命令進行轉發的流程,相似工做流。而且,也很是相似狀態模式,它們共同的特色就是將一個複雜的判斷邏輯,轉移到各個子類,而後在由子類進行簡單判斷。
18.命令模式
顧名思義,命令模式就是對命令的封裝,所謂對命令的封裝,說白了,無非就是把一系列的操做寫到一個方法中,而後供客戶端調用就好了。
19.備忘錄模式
主要目的是保存一個對象的某個狀態,以便在適當的時候恢復對象,我的以爲叫備份模式更形象些,通俗的講下:假設有原始類A,A中有各類屬性,A能夠決定須要備份的屬性,備忘錄類B是用來存儲A的一些內部狀態,類C呢,就是一個用來存儲備忘錄的,且只能存儲,不能修改等操做。
20.狀態模式
一個方法的判斷邏輯太長,就不容易修改。方法過長,其本質就是,就是本類在不一樣條件下的狀態轉移。狀態模式,就是將這些判斷分開到各個能表示當前狀態的獨立類中。核心思想就是:當對象的狀態改變時,同時改變其行爲,很好理解!就拿QQ來講,有幾種狀態,在線、隱身、忙碌等,每一個狀態對應不一樣的操做,並且你的好友也能看到你的狀態,因此,狀態模式就兩點:一、能夠經過改變狀態來得到不一樣的行爲。二、你的好友能同時看到你的變化。
21.訪問者模式
訪問者模式就是一種分離對象數據結構與行爲的方法,經過這種分離,可達到爲一個被訪問者動態添加新的操做而無需作其它的修改的效果。在不改變原有代碼的結構上,又想去影響原來的類,或是訪問原來類的成員,此時就可使用訪問者模式。但須要注意的是:事先須要構造好那些要訪問的對象的對象結構。這個結構在訪問者類中去維護。
22.中介者模式
中介者類惟一要乾的事情就是給各個成員對象發出通知。所以,中介者事先就應該知道有哪些成員。是用來下降類類之間的耦合的,由於若是類類之間有依賴關係的話,不利於功能的拓展和維護,由於只要修改一個對象,其它關聯的對象都得進行修改。若是使用中介者模式,只需關心和抽象中介類的關係,具體類類之間的關係及調度交給抽象中介類就行,這有點像spring容器的做用。
23.解釋器模式
描述瞭如何爲簡單的語言定義一個文法,如何在該語言中表示一個句子以及如何解釋這些句子。好比寫好了C#代碼,VB代碼,此時須要個編譯器來編譯。這時,這個編譯器就至關於解釋器,解釋好了交給CPU執行就行了。