1. 程式人生 > 其它 >設計模式之設計原則及工廠模式覆盤

設計模式之設計原則及工廠模式覆盤

設計原則

開閉原則

  • 指系統對擴充套件開放,對修改關閉。
  • 通過繼承擴充套件,而不是修改已有業務。

依賴倒置原則

  • 高層模組不應依賴底層模組,兩者都應該依賴抽象。
  • 抽象不應依賴細節,而細節應該抽象。

單一職責

  • 一個類有且僅有一個導致其改變的原因。

介面隔離原則

  • 將不同的業務抽象到不同的介面中。

迪米特法則(最少知道原則)

  • 規定只和朋友通訊,而不和陌生人通訊。

里氏替換原則

  • 子類可實現父類的抽象方法,不能覆蓋父類非抽象方法。
  • 子類可擁有屬於當前的特有方法。
  • 當子類過載父類方法時,方法前置條件【傳入引數】要比父類寬鬆。
  • 當子類過載父類方法時,方法後置條件【返回引數】要比父類嚴格。

複合複用原則

  • 推薦首先使用組合方法構建實現,其次使用繼承。
  • 三種方式:
    • is - 繼承
    • has - 注入【使用提供】
    • contains - 擁有【類內部擁有】

總結

  • 設計模式是前人在長期實踐過程中,總結出的一套軟體設計規範。
  • 設計模式是一種設計思想,具體需結合實踐情況做相應的取捨,而不是完全遵守設計原則。
  • 設計模式提高系統可維護性,增加程式可擴充套件性,降低類之間耦合,提升程式碼可複用性。

工廠模式

  • 工廠模式是屬於設計模式中的建立型模式,將物件的建立封裝在相應工廠中,客戶端只需從工廠獲取產品,無需知道產品的建立細節,符合設計原則中迪米特法則(最少知道原則)。
  • 工廠模式實分為簡單工廠、工廠方法及抽象工廠三種實現方式。

簡單工廠

  • 該實現方法相對簡單,僅由一個工廠負責所有產品的建立,客戶端只需提供產品名稱便可獲取到相應產品。
  • 由於所有產品都在一個工廠建立,當產品增加且建立過程變得複雜時,工廠類變得臃腫且複雜,不便於後期維護。
  • 該方式每當需求變更時,必須修改已有程式才能滿足新產品建立,違反了開閉設計原則。

工廠方法

  • 為每個產品定義一個用於建立該產品的工廠,客戶端只需從指定產品工廠獲取產品。
  • 每個產品都需要定義對應的工廠,增加了系統複雜度。

抽象工廠

  • 抽象工廠在工廠方法的基礎上,對工廠進行了抽象,定義一個抽象工廠類,由子類負責產品的建立,符合依賴倒置原則。
  • 當新增產品時需修改抽象工廠類,違反了開閉原則。

總結

  • 簡單工廠實現簡單。
  • 工廠方法為每個產品定義工廠類。
  • 抽象工廠對工廠方法進行了改進,提倡介面程式設計。