面向對象編程原則和幾種常用設計模式


設計模式相關項目舉例鏈接地址

7大設計原則

  1. 單一職責原則

    1. 降低類的復雜度,一個類只負責一項職責
    2. 提高可讀性可維護性
  2. 接口隔離原則

    一個類對另一個類的依賴應該建立在最小的接口上

  3. 依賴倒轉原則

    1. 低層模塊盡量都要有抽象類或接口
    2. 變量的聲明類型盡量是抽象類或接口,以在變量引用和實際對象間存在一個緩沖層
    3. 繼承時遵循里氏替換原則
  4. 里氏替換原則

    1. 所有引用基類的地方必須能透明地使用其子類的對象
    2. 在子類中盡量不要重寫父類的方法
  5. 開閉原則

    1. 對擴展開放,對修改關閉。
  6. 迪米特法則

    1. 簡單定義:只與直接的朋友通信,最少知道原則。
    2. 核心是降低類之間的耦合
  7. 合成復用原則

    1. 盡量使用合成/聚合的方式,而不是使用繼承。
    2. 針對接口編程

類圖

  1. 依賴關系:
    1. 泛化關系:繼承
    2. 實現關系:
    3. 關聯關系:
      1. 聚合關系:
      2. 組合關系:整體和部分不可分開

設計模式

單例模式

  1. 保證了 系統內存中該類只存在一個對象,節省了系統資源。
  2. 對於一些需要頻繁創建銷毀的對象,使用單例模式可以提高系統性能。
  3. 當想實例化一個單例類的時候,必須要記住使用相應的獲取對象的方法,而不是使用new

使用場景:需要頻繁的進行創建和銷毀的對象、創建對象時耗時過多或耗費資源過多(即:重量級對象),但又經常用到的對象、工具類對象、頻繁訪問數據庫或文件的對象(比如數據源、session工廠等)

工廠模式

三種工廠模式 (簡單工廠模式、工廠方法模式、抽象工廠模式)

意義:將實例化對象的代碼提取出來,放到一個類中統一管理和維護,達到和主項目的依賴關系的解耦。從而提高項目的擴展和維護性。

創建對象實例時,不要直接 new 類, 而是把這個new 類的動作放在一個工廠的方法中,並返回。

變量不要直接持有具體類的引用。 不要讓類繼承具體類,而是繼承抽象類或者是實現interface(接口) 不要覆蓋基類中已經實現的方法。

  1. 簡單工廠,就是一個工廠里面可以加工一個類型的不同實例對象,比如可以加工好座椅,也可以加工壞座椅,但必須是座椅。
  2. 工廠方法的一個工廠只能加工一個類型的一個實例對象。比如,座椅,一個工廠只能加工一種質量的座椅出來。
  3. 抽象工廠比較適合一個產品簇。因為一個工廠可以加工多個不同類型的實例對象。比如【座椅,輪胎】,一個工廠不但可以加工出來座椅,還可以加工出來輪胎,但是座椅,和輪胎的種類只能是一種。

原型模式

  1. 創建新的對象比較復雜時,用來簡化對象的創建過程,同時也能夠提高效率
  2. 不用重新初始化對象,而是動態地獲得對象運行時的狀態
  3. 如果原始對象發生變化(增加或者減少屬性),其它克隆對象的也會發生相應的變化,無需修改代碼
  4. 在實現深克隆的時候可能需要比較復雜的代碼
  5. 缺點:需要為每一個類配備一個克隆方法,這對全新的類來說不是很難,但對已有的類進行改造時,需要修改其源代碼,違背了ocp原則。

適配器模式

三種命名方式,是根據 src是以怎樣的形式給到Adapter(在Adapter里的形式)來命名的。將原本不兼容的接口融合在一起工作。

  • 類適配器:以類給到,在Adapter里,就是將src當做類,繼承

    1. Java是單繼承機制,所以類適配器需要繼承src類這一點算是一個缺點, 因為這要求dst必須是接口,有一定局限性;
    2. src類的方法在Adapter中都會暴露出來,也增加了使用的成本。
    3. 由於其繼承了src類,所以它可以根據需求重寫src類的方法,使得Adapter的靈活性增強了。
  • 對象適配器:以對象給到,在Adapter里,將src作為一個對象持有。

    1. 根據合成復用原則,使用組合替代繼承。
    2. 解決了類適配器必須繼承src的局限性問題,也不再要求dst必須是接口 使用成本更低,更靈活。
  • 接口適配器:以接口給到,在Adapter里,將src作為一個接口,實現

    1. 一些書籍稱為:適配器模式(Default Adapter Pattern)或缺省適配器模式。
    2. 當不需要全部實現接口提供的方法時,可先設計一個抽象類實現接口,並為該接口中每個方法提供一個默認實現(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求
    3. 適用於一個接口不想使用其所有的方法的情況。

代理模式

  1. 通過代理對象訪問目標對象。好處是:可以在目標對象實現的基礎上,增強額外的功能操作,即擴展目標對象的功能。
  2. 被代理的對象可以是遠程對象創建開銷大的對象或需要安全控制的對象
  3. 代理模式有不同的形式, 主要有三種 靜態代理動態代理 (JDK代理、接口代理)和 Cglib代理(可以在內存動態的創建對象,而不需要實現接口, 他是屬於動態代理的范疇)。

觀察者模式

  1. 觀察者模式設計后,會以集合的方式來管理用戶(Observer),包括注冊,移除和通知。
  2. 這樣,我們增加觀察者(這里可以理解成一個新的公告板),就不需要去修改核心類WeatherData不會修改代碼,遵守了ocp原則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM