設計模式並不使用獨特的語言特性,也不採用那些神奇的編程技巧。全部的模式都可以用標準的面嚮對象語言實現,這也許會多費一些功夫,可是增長了軟件的靈活性和可複用性。編程
書中根據模式的性質將模式劃分爲三類:建立型(creational)、結構型(structural)、行爲型(behavioral)。 建立型模式與對象的建立有關;結構型模式處理類或對象的組合;行爲型模式對類或對象怎樣交互和怎樣分配職責進行描述。設計模式
多態:對象接口與其功能實現是分離的,不一樣對象能夠對請求作不一樣的實現,也就是說,兩個有相同接口的對象能夠有徹底不一樣的實現。框架
在面向對象系統中,接口是基本的組成部分,對象只有經過它們的接口才能與外部交流,若是不經過對象的接口就沒法知道對象的任何事情,也沒法請求對象作任何事情。工具
理解對象的類和類型(抽象、具體、混入)之間的差異很是重要:一個對象的類定義了對象是怎樣實現的,同時也定義了對象的內部狀態和操做的實現。可是對象的類型只與它的接口有關,接口即對象能響應的請求的集合,一個對象能夠有多個類型,不一樣類也能夠有相同的類型。設計
全部從抽象類導出的類將共享該抽象類的接口,這時,全部的子類都能相應抽象類中的請求。只根據抽象類中定義的接口來操做對象有如下兩個好處: 1)客戶無須知道他們使用對象的特定類型,只須對象有客戶所指望的接口。 2)客戶無須知道他們使用的對象是用什麼類來實現的,他們只須知道定義接口的抽象類。 這樣能夠極大地減小系統實現之間的相互依賴,也產生了可複用的面相對象設計的以下原則: 針對接口編程,而不是針對實現編程。對象
混入類是給其餘類提供可選擇的接口或功能的類,它與抽象類同樣不能實例化,都是用於繼承的,抽象類和混入類都是對象的類型。繼承
優先使用對象組合,而不是類繼承。 由於當須要複用子類時,實現上的依賴性就會產生一些問題。若是繼承下來的實現不適合解決新的問題,則父類必須重寫或被其餘更適合的類替換。這種依賴關係限制了靈活性並最終限制了複用性。優先使用對象組合有助於保持每一個類被封裝,並被集中在單個任務上;基於對象組合的設計有更多的對象(而有較少的類),且系統的行爲將依賴於對象間的關係而不是被定義在某個類中。接口
委託(在一個對象中引用另外一個對象,以此來完成請求)是對象組合的特例。它告訴你對象組合做爲一個代碼複用機制能夠替代繼承。io
設計問題對框架設計而言最具重要性。(相比應用和工具庫)一個使用設計模式的框架比不使用設計模式的框架更可能得到高層次的設計複用和代碼複用。成熟的框架一般使用了多種設計模式。瞭解設計模式的人能更快的洞悉框架。class