★01.設計模式概念

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容