設計模式六(門面模式)

2021-10-25 17:14:36 字數 2286 閱讀 4960

門面模式

門面模式(facade pattern)又叫外觀模式,提供了乙個統一介面,用來訪問子系統中的一群介面。其主要特徵是定義了乙個高層介面,讓子系統更容易使用,屬於結構型模式。

其實,在我們日常的編碼工作中,我們都在有意無意的大量使用門面模式,但凡只要高層模組需要排程多個子系統(2 個以上類物件),我們都會自覺的建立乙個新類封裝這些子系統,提供精簡介面,讓高層模組可以更加容易間接呼叫這些子系統的功能。尤其是現階段各種第三方 sdk,各種開源類庫,很大概率都會使用門面模式。尤其是你覺得呼叫越方便的,門面模式使用的一般更多。

門面模式的應用場景

子系統越來越複雜,增加門面模式提供簡單介面;

構建多層系統結構,利用門面物件作為每層的入口,簡化層間呼叫。

門面模式通用寫法

先來建立 3 個子系統:

public

class

subsystema

}public

class

subsystemb

}public

class

subsystemc

}

然後建立門面類:

public

class

facade

// 對外介面

public

void

dob(

)// 對外介面

public

void

doc(

)}

客戶端呼叫**:

public

static

void

main

(string[

] args)

門面模式業務場景例項

舉個栗子,某些電商系統中存在的積分兌換禮品功能,禮品**中大部分功能不需要重新開發,直接對接子系統介面進行呼叫 ,具體的業務邏輯,由子系統進行處理完成。比如積分系統、物流系統、支付系統等。這些請求如果全部由前端傳送網路請求去呼叫現有介面的話,一則會增加前端開發人員的難度,二則會增加一寫網路請求影響頁面效能。這個時候就可以發揮門面模式的優勢了。將所有現成的介面,全部整合到乙個類中, 由後端提供統一介面給前端,這樣前端開發人員就不需要關係具體的業務邏輯,可以把精力全部放在頁面互動上。下面來寫個例子,模仿一下:

首先建立禮品類:

public

class

giftinfo

public string getname()

public integer getintegral()

}

然後編寫各個子系統的業務,這裡簡化:

/**

* 積分服務

*/public

class

qualifyservice

else}}

/** * 支付服務

*/public

class

paymentservice

}/**

* 物流服務

*/public

class

shippingservice

}

下面建立門面類:

/**

* 對外提供的兌換禮品 介面

*/public

class

facadeservice}}

}

最後,測試呼叫:

public

static

void

main

(string[

] args)

執行結果:

門面模式在原始碼中的體現

在 spring 中的 jdbcutils類,它封裝了和 jdbc相關的所有操作,來看原始碼:

門面模式的優缺點

優點:簡化了呼叫過程,無須深入了解子系統,以防給子系統帶來風險;

減少系統依賴、鬆散耦合;

更好的劃分訪問層次,提高了安全性;

遵循了迪公尺特法則,即最少知道原則;

缺點:當增加子系統或擴充套件子系統行為時,可能容易帶來未知風險;

不符合開閉原則;

某些情況下,可能違背單一職責原則;

設計模式 05 門面模式

目錄 什麼是門面模式 為什麼要用門面模式 門面模式組成 需要注意的幾點 門面模式如其名稱所述,是內部功能對外的使用者介面。就如同門面一樣,將自身內在的複雜功能實現隱藏,而對外暴露簡單的使用者介面。在專案裡當乙個系統要去完成乙個功能時,很多情況下都需要其多個子系統服務聯合才能完成。而對應外界的呼叫方來...

設計模式筆記14 門面模式

在主件構建過程中,某些介面之間的依賴常常會帶來很多問題 甚至根本無法實現。採用新增一層間接 穩定 介面,來隔離本來互相緊密關聯的介面是一種常見的解決方案。典型模式 為子系統中的一組介面提供乙個一致 穩定 的介面,fa ade模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用 復用 設計模式 ...

18 門面模式

要求乙個子系統的外部與其內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。門面模式注重 統一的物件 也就是提供乙個訪問子系統的介面,除了這個介面不允許有任何訪問子系統的行為發生 門面模式的類圖 facade是門面角色,此角色知曉子系統的所有功能和責任,一般會將...