第二章
層次結構信息的表述一般是經過一種被稱爲遞歸組合的技術來實現的。遞歸組合能夠由較簡單的元素逐漸創建複雜的元素。算法
得到跨越硬件和軟件平臺的可移植性是系統設計的主要問題之一。移植的一大障礙是不一樣視感標準之間的差別性。設計模式
一個平臺將多個互相重疊的窗口展現在一個點陣顯示器上。數據結構
圖源抽象的一個重要做用就是隱藏了存儲其子圖源的數據結構,咱們能夠在不影響其餘類的狀況下改變圖元的數據結構。測試
圖元接口不該該偏重於某個數據結構。ui
一個好的解決方案是封裝那些變化的概念。設計
分析對象怎樣才能不使用類型測試或強制類型轉換也能正確對待各類不一樣的圖元。代理
第三章 建立型模式
建立型模式實例化了過程。對象
設計模式中兩個不斷出現的主旋律:遞歸
- 它們都將關於該系統使用哪些具體的類的信息封裝起來
- 隱藏了這些類的實例是如何被建立和放在一塊兒的
整個系統關於這些對象所知道的是由抽象類所定義的接口接口
Abstract Factory(抽象工廠)——對象建立型模式
提供一個建立一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
適用:
- 一個系統要獨立於它是產品建立、組合和表示時
- 一個系統要由多個產品系列中的一個來配置時
- 當你要強調一系列相關的產品對象的設計以便進行聯合適用時
- 提供一個產品類庫,而只想顯示它們的接口而不是實現時
優缺點:
- 分離了具體的類
- 使得易於交換產品系列
- 有利於產品的一致性
- 難以支持新種類的產品
一些實現:
- 將工廠做爲單件
- 建立產品
- 定義可擴展的工廠
一個具體的工廠一般是一個單件的
Builder(生成器)——對象建立模型模式
將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。
每個轉換器類建立和裝配一個複雜對象的機制隱含在抽象接口的後面。
適用:
- 當建立複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時
- 當構造過程必須運行被構造的對象有不一樣表示時
效果:
- 它使你能夠改變一個產品的內部表示
- 它將構造代碼和表示代碼分開
- 它使你對構造過程進行更精細的控制
Builder模式着重於一步步構造一個複雜對象。而Factory Method着重於多個系列的產品對象。Builder在最後一步返回廠品,而對於Abstract Factory來講,產品是當即返回的。
Factory Method(工廠方法)——對象建立型模式
定義一個用於建立對象的接口,讓子類決定實例化哪個類。
適用:
- 當一個類不知道它所必須建立的對象的類的時候、
- 當一個類但願由它的子類來指定它所建立的對象的時候
- 當類將建立對象的職責委託給多個幫助子類的某一個,而且你但願將哪個幫助子類是代理者這一信息局部化的時候
效果:
- 爲子類提供掛鉤
- 鏈接評選的類層次
實現:
- 主要兩種不一樣的狀況
- 是一個抽象類而且不提供它所聲明的工廠方法的實現
- 是一個具體類並且爲工廠方法提供一個缺省的實現
- 參數化工廠方法
- 特定語言的變化和問題
- 使用模板以免建立子類
Prototype(原型)——對象建立型模式
用原型實例指定建立對象的種類,而且經過拷貝這些原型建立新的對象。
當一個系統應該獨立於它的產品建立、構成和表示時,要用Prototype模式或
- 當要實例化的類是在運行時刻指定時
- 爲了不建立一個與產品類層次平行的工廠類層次時
- 當一個類的實例只能與幾個不一樣狀態組合中的一種時
優勢:
- 運行時刻增長和刪除產品
- 改變值以指定新對象
- 改變結構以指定新對象
- 減小子類構造
- 用類動態配置應用
考慮的問題:
- 使用一個原型管理器
- 實現克隆操做
- 初始化克隆對象
Singleton(單件)——對象建立型模式
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
一個全局變量使得一個對象能夠被訪問,但它不能防止你實例化多個對象。一個更好的辦法是讓類自身負責保存它的惟一實例。
適用:
- 當類只能有一個實例並且客戶能夠從一個衆所周知的訪問點訪問它時
- 當這個惟一實例應該是經過子類化可擴展的,而且客戶應該無需更改代碼就能使用一個擴展的實例時
優勢:
- 對惟一實例的受控訪問
- 縮小名空間
- 容許對操做和表示的精化
- 容許可變數目的實例
- 比類操做更靈活
問題:
- 保證一個惟一實例
- 建立類的子類