*動機(motivation)
上述a方案的問題在於元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。
如何簡化外部客戶程式和系統間的互動介面?如何將外部客戶程式的演化和內部子系統的變化之間的依賴相互解耦?
模式定義
為子系統中的一組介面提供乙個一致(穩定)的介面,facade模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用(復用)。
——《設計模式》gof
要點總結
從客戶程式的角度來看,facade模式簡化了整個元件系統的介面,對於元件內部與外部客戶程式來說,達到了一種「解耦」的效果——內部子系統的任何變化不會影響到facade介面的變化。
facade 設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。facade 很多時候更是一種架構設計模式。
facade 設計模式並非是乙個貨櫃,可以任意地放進任何多個物件。facade 模式中元件的內部應該是「相互耦合關係比較大的一系列元件」,而不是乙個簡單的功能集合。
以上摘錄於李建忠 c++ builder 設計模式
以下是本人原創:
package main
import "fmt"
// 外觀設計模式或門面設計模式
// 定義乙個閘道器facade
type getwayfacade struct
func (g *getwayfacade) getorders()
// 使用者模組
type user struct
func (u *user) getuserid()
// 訂單模組
type order struct
func (o *order) getorders()
//商品模組
type product struct
func (p *product)getproduct()
func main()
// 通過閘道器來獲取使用者訂單
f.getorders()
}
設計模式之外觀 門面模式
場景 假設積分兌換物品流程,一共有三部分別依賴三個子系統 1.積分校驗系統,檢視是否有資格。2.積分支付系統,兌換禮物,扣減積分等。3.物流系統,兌換禮物後,進行配送流程。禮物實體類 public class pointsgift public string getname public void ...
PHP設計模式之外觀(門面)模式
外觀模式 只是為乙個分層或子系統建立乙個單一的入口。外觀類,它需要了解所有的子系統的方法或屬性,進行組合,以備外界呼叫 class facade function methoda function methodb function methodn facade new facade facade m...
外觀 門面 模式 結構型
門面模式是物件的結構模式,外部與乙個子系統的通訊必須通過乙個統一的門面物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。現代的軟體系統都是比較複雜的,設計師處理複雜系統的乙個常見方法便是將其 分而治之 把乙個系統劃分為幾個較小的子系統。如果把醫院作為乙個子系統,按照部門職能,這個系統可以...