第一章 引言
本章主要是讓我們大致明白設計模式是幹嘛用的,模式分類,設計模式如何解決設計問題以及幾種常見的面向對象設計中軟件的複用方法。
1.什麼是設計模式?
個人理解概括,設計模式是對一類問題的抽象,並描述了該類問題的解決方案。是對用來在特定場景下解決一般設計問題的類和相互通信的對象的描述。
模式四要素:(1)模式名稱 。設計模式使得我們能在高的抽象層次上進行設計;(2)問題 。何時使用該模式;(3)解決方案 。對應與設計問題的解決方法,設計的組成成分,之間的相互關係以及各自的職責和協作方式。(4)效果。模式應用的效果以及使用該模式時候應該權衡的問題。
舉例:MVC設計模式
MVC,模型/視圖/控制器(model/view/controller),被用來構建用戶界面。 model是應用對象,view是模型在屏幕上的顯示,controller是定義用戶界面對用戶輸入的響應方式。
2.模式分類
(1)創建型模式(creational):
與對象的創建有關。創建型類模式將對象的部分創建工作延遲到子類;創建性對象模式將對象的部分創建延遲到另一個對象。
(2)結構型模式(structual):
處理類或者對象的組合。結構性類模式使用繼承組合類;結構性對象模式使用組合對象。
(3)行爲型模式(behavioral):
描述類或者對象如何交互,如何分配職責。行爲型類模式使用繼承描述算法和控制流;行爲型對象模式描述一組對象如何協作來完成單個對象不能完成的工作。
3.設計模式如何解決問題
(1)尋找適合的對象
(2)決定對象的粒度
(3)指定對象的接口
(4)描述對象的實現
(5)運用複用機制
A.繼承
優勢:白箱複用。父類的實現細節對子類可見,子類可重定義或者覆蓋父類的操作。
缺點:破壞了父類的封裝性;父類實現的變化會對子類有很大影響,子類嚴重依賴於父類。
一個解決方法是,只繼承抽象類。
B.組合
優勢:黑箱複用。系的功能通過對象的組裝或者組合實現,類的實現不可見;對象只通過接口訪問,不破壞封裝性。
組合對象通過獲得對其他對象的引用而在運行時刻動態地定義。保證每個類被封裝,並集中在單任務上。系統的行爲將依賴對象間的關係,而不是集中在一個類中。
面向對象設計原則:優先使用對象組合,而不是類繼承。
委託是一種組合的特例。它使得組合具有與繼承同樣的複用功能。委託方式下,有兩個對象參與處理一個請求,接受請求的對象將操作委託給代理者。
C.模板(參數化類型)
定義一個類型時候,不用指定所用到的其他類型。
聚合VS關聯或者引用:
當類之間有整體-部分關係的時候,我們就可以使用聚合。
關聯或者引用是比聚合更弱的一種耦合關係。C3->C4:表示相識關係,指C3知道C4,C3可以調用C4的公共屬性和方法。沒有生命期的依賴。一般是表示爲一種引用。
耦合強弱關係: 依賴(對象作爲操作的參數)<關聯(成員是指針)<聚合(成員是對象)<組合(成員是對象)
4.設計模式應該支持變化
設計模式在應用程序、工具箱、框架中所起的作用。
(1)應用程序
(2)工具箱
(3)框架
UML中類之間的關係圖,可以參考這篇文章:點擊打開鏈接 http://www.cnblogs.com/riky/archive/2007/04/07/704298.html