- 一個對象的所有操作統(tǒng)稱為接口。
- 擁有同一接口的兩個對象為同一類型。
- 類與類型的區(qū)別:類定義了對象的接口和數(shù)據(jù)(內部狀態(tài)),類型只與對象的接口有關。不同類的對象可以有相同類型。
- 一個類型接口包含另一個類型接口時,我們稱它是另一個類型的子類型。另一個類型稱之為它的超類型。子類型繼承超類型。
- 對象的接口與其實現(xiàn)四分離的,即兩個相同接口的對象可以有完全不同的實現(xiàn)。
- 對象發(fā)送請求所執(zhí)行的具體操作與請求有關也與對象本身有關。給對象發(fā)送請求所執(zhí)行的操作在運行時刻才確定時稱為動態(tài)綁定。
- 一個對象可以在運行時替換為另一個有相同接口的對象,這種可替換性稱為多態(tài)。
- 對象為類的實例。
- 抽象類的主要目的是為子類定義公共接口,抽象類不能實例化。
- 抽象類中定義而未實現(xiàn)的操作稱為抽象操作。
- 非抽象類稱為具體類。
- 混入類是給其他類提供接口和功能的類,不能實例化,沒有數(shù)據(jù)成員,要求多繼承。
- 針對接口編程而不是針對實現(xiàn)編程。
- 復用方式有兩種:類繼承和對象組合。類繼承為白箱復用,因父類內部細節(jié)可見。對象組合為黑箱復用,因用于組合的對象內部細節(jié)不可見。
- 類繼承方式容易破壞封裝性:子類通常強烈依賴父類實現(xiàn),以至于父類實現(xiàn)發(fā)現(xiàn)任何變化(即使接口沒變)必然導致子類發(fā)生變化,限制了復用性。一個好的解決方案是,只繼承抽象類,因為 抽象類通常提供較少實現(xiàn)。
- 對象組合方式不破壞封裝性,因為只能通過對象接口訪問。因為對象是基于接口寫的,所以實現(xiàn)上存在較少依賴關系。
- 優(yōu)先使用對象組合,而不是類繼承。因為對象組合通常針對接口編程,而類繼承針對實現(xiàn)編程(第13點)。
- 理想情況下,應該減少創(chuàng)建新的構件,而多使用對象組合去組合已有構件來獲得你需要的功能。但實際情況下,已有構件通常不夠豐富,不得不使用繼承去創(chuàng)建新的構件。
- 經驗表明:設計者往往過度使用繼承,但依賴對象組合的設計有更好的復用性(或更簡單)。
- 委托是一種組合方法,將給A類的請求的處理委托給B類。如果C類與B類有相同的類型,則在需求改變時,可以簡單地將B類替換為C類。
- 對象組合的缺點:動態(tài)的、高度參數(shù)化的軟件比靜態(tài)軟件更難于理解,運行低效。(不過從長遠來看人的低效才是更主要的。)
- 只有當委托使設計比較簡單而不是更復雜時,它才是好的選擇。
- ※委托是對象組合的特例?
- 參數(shù)化類型=類屬=模板。
- 組合面向對象系統(tǒng)中的行為的三種方式:類繼承、對象組合、參數(shù)化類型。
- 對象組合技術:能再運行時改變被組合的行為,存在間接性,比較低效,濫用降低可讀性。
- 類繼承:允許提供操作的默認實現(xiàn),通過子類重定義這些操作,不能運行時改變。
- 參數(shù)化類型:允許改變類所用到的類型,不嗯呢運行時改變。
- 聚合:一個對象包含另一個對象,或者是另一個對象的一部分。擁有相同的生命周期。
- 相識:一個對象與另一個對象有“關聯(lián)”或者“引用”關系。標識了對象間松散的耦合關系。
- 聚合和相識在程序設計語言中無區(qū)別,不是由語言機制決定的。
- 聚合:使用少,關系持久。
- 相識:使用多,關系短,更具動態(tài)性。
- 獲得最大限度復用的關鍵在于對新需求和已有需求發(fā)生變化時的預見性,要求你的系統(tǒng)設計要能夠相應地改進。
- 健壯,可根據(jù)未來需求變化而花費少量代價復用的設計:
- 間接創(chuàng)建對象,而不是顯式地指定一個類來創(chuàng)建對象。
- 減少對特殊操作的依賴,最小單一功能原則,避免把請求代碼寫死,使改變響應請求的方法變得容易。
- 減少對特定硬件和軟件平臺的依賴。
- 保持封裝性,對用戶隱藏實現(xiàn)細節(jié)。
- 減少對可能發(fā)生變化的算法的依賴。
- 選擇松耦合而不是緊耦合。因為緊耦合的類互相依賴,松耦合則提高了一個類本身被復用的可能性。
- 不要通過生成子類來擴充功能,原因:
- 通常很難通過定義子類來擴充功能。
- 需要對父類有深入的了解,破壞了封裝性。
- 重定義一個操作可能需要重定義其他操作。
- 一個被重定義的操作可能需要調用繼承下來的操作。
- 容易導致“類爆炸”,即擴充一個功能不得不引入許多新的子類。
- 使對類的修改方便。
- 設計模式通過減少依賴性來提高內部復用性。
- 通過孤立和封裝被一個操作來消除對特定操作的依賴,可使在不同上下文中復用一個操作變得更簡單。
- 設計模式對應用程序、工具箱、框架的作用:
- 應用程序:優(yōu)先考慮內部復用性、可維護性和可擴充性。
- 工具箱:比應用程序難,強調代碼復用,避免假設和依賴。使用工具箱時,寫應用的主體,調用你想復用的代碼。
- 框架:強調設計復用。必須盡可能靈活、可擴充。使用框架時,復用應用的主體,寫主體調用的代碼。
- 框架應該配合文檔使用,文檔對框架極其重要。
- 設計模式與框架的區(qū)別:
- 設計模式比框架更抽象。
- 設計模式是比框架更小的體系結構元素。
- 框架比設計模式更加特例化。
- 基于類繼承的方法通常會引起類爆炸現(xiàn)象。
★01.設計模式概念
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- 轉自:http://blog.csdn.net/jackfrued/article/details/4492194...