淺談23種設計模式

淺談23種設計模式算法

類之間的關聯關係:在使用Java、C#和C++等編程語言實現關聯關係時,一般將一個類做爲另外一個類的屬性。
  (1)雙向關聯,兩個類互相爲各自的屬性,好比顧客類Customer和商品類Product,顧客擁有商品,商品與某個顧客相關聯。
  (2)單向關聯,一個類做爲另外一個類的屬性,顧客Customer擁有地址Address,UML圖用帶箭頭的直線表示,由Customer指向Address。
  (3)自關聯,此類的屬性對象類型屬於該類自己,例如節點類Node的成員又是節點對象。
  (4)多重關聯,Form類的對象包含多個Button類,一個Button只與一個Form相關聯。
  (5)聚合關係,是一種特殊的關聯關係,強調部分與總體,好比汽車Car和引擎Engine,引擎能夠脫離汽車單獨存在,可是是汽車的組成部分,UML圖中用帶空心菱形的直線表示,由汽車指向引擎,表示汽車contains引擎。(Engine類能夠在Car類的外部實例化,而後做爲參數傳入Car類)
  (6)組合關係,是一種特殊的關聯關係,也強調部分與總體關係,好比頭Head和嘴Mouth,Mouth不能脫離Head單獨存在,UML圖用帶實心菱形的直線表示,由Head指向Mouth,表示頭has嘴。(Mouth類在Head類的構造函數中實例化,Head銷燬則Mouth也銷燬)
*組合關係和聚合關係與普通的關聯關係主要是語義上的區別,表示關聯的程度。編程

類之間的依賴關係:表示某個類的方法使用另外一個類的對象做爲參數,UML圖用帶箭頭的虛線表示,由依賴方指向被依賴方。設計模式

泛化關係:即繼承關係,UML圖中用帶空心三角形的直線表示,例如Student類 is-a-kind-of Person類編程語言

接口與實現關係:表示類實現接口中所聲明的操做。UML圖中用帶空心三角形的虛線表示。函數

 

面向對象設計原則:
  (1)單一職責原則:類的職責要單一,不能將太多的職責放在一個類中。
  (2)開閉原則:能夠在不修改一個軟件實體的基礎上去擴展其餘功能。
  (3)里氏代換原則:在軟件系統中,一個能夠接受基類對象的地方必然能夠接受一個子類對象。
  (4)依賴倒轉原則:針對抽象層編程,不要針對具體類編程。
  (5)接口隔離原則:使用多個專門的接口來替代一個統一的接口。
  (6)合成複用原則:在系統中儘可能多使用組合和聚合關係,儘可能少使用甚至不使用繼承關係。
  (7)迪米特法則:一個軟件實體對其餘實體引用越少越好,或者說若是兩個類沒必要彼此直接通訊,那麼兩個類就不該當發生直接的相互做用,而是引入一個第三者發生間接交互。

spa

設計模式定義:設計模式是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結,使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設計

 

五種對象建立型模式:
1.工廠方法模式
  工廠父類負責定義建立產品對象的公共接口,而工廠子類則負責生成具體的產品對象,這樣作的目的是將產品類的實例化操做延遲到工廠子類中完成,即經過工廠子類來肯定究竟應該實例化哪個具體產品類。
2.抽象工廠模式
  提供一個建立一系列相關或依賴對象的接口,而無須指定他們具體的類。
3.建造者模式
  將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。建造者模式是一步一步建立一個複雜的對象,它容許用戶只經過指定複雜對象的類型和內容就能夠構建它們,用戶不須要知道內部的具體構建細節。
4.原型模式
  用原型實例指定建立對象的種類,而且經過複製這些原型建立新的對象。原型模式容許一個對象再建立另一個可定製的對象,無須知道任何建立的細節。原型模式的基本工做原理是經過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象經過請求原型對象複製原型來實現建立過程。
5.單例模式
  單例模式確保某一個類只有一個實例,並且自行實例化並向整個系統提供這個實例,這個類稱爲單例類,它提供全局訪問的方法。單例模式的要點有三個:一是某個類只能有一個實例;二是它必須自行建立這個實例;三是它必須自行向整個系統提供這個實例。代理

七種結構型模式:
1.適配器模式
  將一個接口轉換成客戶但願的另外一個接口,適配器模式使接口不兼容的那些類能夠一塊兒工做。
2.橋接模式
  將抽象部分與它的實現部分分離,使它們均可以獨立地變化。
3.組合模式
  組合多個對象造成樹形結構以表示「總體-部分」的結構層次。組合模式對單個對象(葉子對象)和組合對象(容器對象)的使用具備一致性。
4.裝飾模式
  動態地給一個對象增長一些額外的職責,就增長對象功能來講,裝飾模式比生成子類實現更爲靈活。
5.外觀模式
  外部與一個子系統通訊必須經過一個統一的外觀對象進行,爲子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子接口更加容易使用。
6.享元模式
  運用共享技術有效地支持大量細粒度對象的複用。系統只使用少許的對象,而這些對象都很類似,狀態變化很小,能夠實現對象的屢次複用。
7.代理模式
  給某一個對象提供一個代理,並由代理對象控制對原對象的引用。日誌

十一種行爲型模式:
1.職責鏈模式
  避免請求發送者與接收者耦合在一塊兒,讓多個對象都有可能接收請求,將這些對象鏈接成一條鏈,而且沿着這條鏈傳遞請求,直到有對象處理它爲止
2.命令模式
  將一個請求封裝爲一個對象,從而使咱們可用不一樣的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支持可撤銷的操做。
3.解釋器模式
  定義語法的文法,而且創建一個解釋器來解釋語言中的句子,這裏的「語言」意思是使用規定格式和語法的代碼。
4.迭代器模式
  提供一種方法來訪問聚合對象,而不是暴露這個對象的內部表示。
5.中介者模式
  用一箇中介對象來封裝一系列的對象交互,中介者使各對象不須要顯示地相互引用,從而使其耦合鬆散,並且能夠獨立地改變它們之間的交互。
6.備忘錄模式
  在不破壞封裝的前提下,捕捉一個對象的內部狀態,並在該對象以外保存這個狀態,這樣能夠在之後將對象恢復到原先保存的狀態。
7.觀察者模式
  定義對象間的一種一對多依賴關係,使得每當一個對象狀態發生改變時,其相關依賴對象皆獲得通知並自動更新。
8.狀態模式
  容許一個對象在其內部狀態改變時改變它的行爲,對象看起來彷佛修改了它的類。
9.策略模式
  定義一系列算法,將每個算法封裝起來,並讓他們能夠相互替換。
10.模板方法模式
  定義一個操做中算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。
11.訪問者模式
  表示一個做用於某對象結構中的各元素的操做,它使咱們能夠在不改變各元素的類的前提下定義做用於這些元素的新操做。orm

相關文章
相關標籤/搜索