門面模式(facade pattern) 又叫外觀模式, 提供了乙個統一的介面, 用來訪問子系統中的一群介面。其主要特徵是定義了乙個高層介面,讓子系統更容易使用,屬於結構性模式。
要求乙個子系統的外部與其內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。其實,在我們日常的編碼工作中,我們都在有意無意地大量使用門面模式,但凡只要高層模組需要排程多個子系統(2個以上類物件),我們都會自覺地建立乙個新類封裝這些子系統,提供精簡介面,讓高層模組可以更加容易間接呼叫這些子系統的功能。尤其是現階段各種第三方sdk, 各種開源類庫,很大概率都會使用門面模式。尤其是你覺得呼叫越方便的,門面模式使用的一般更多。
就以積分兌換禮品為例, 在禮品**中的大部分功能並不是全部重新開發的, 而是要去對接已有的各個子系統。這些子系統可能涉及到積分系統、支付系統、物流系統的介面呼叫。如果所有的介面呼叫全部由前端傳送網路請求去呼叫現有介面的話,一則會增加前端開發人員的難度,二則會增加一些網路請求影響頁面效能。這個時候就可以發揮門面模式的優勢了。將所有現成的介面全部整合到乙個類中,由後端提供統一的介面給前端呼叫,這樣前端開發人員就不需要關心各界面的業務關係,只需要把精力集中在頁面互動上。下面我們用**來模擬一下這個場景。首先, 建立禮品的實體類giftinfo:
publicclass
giftinfo
public
string getname()
}
然後編寫各個子系統的邏輯業務**:
//校驗public
class
qualifyservice }//
支付public
class
paymentservice }//
物流public
class
shippingservice
}
門面:
publicclass
facadeservice }}
}
測試:
publicclass
test
}
優點:
缺點:
設計模式之門面模式
coding gbk coding utf 8 author edgar 這是門面模式的乙個應用場景。具體故事情節請見 設計模式之禪 門面模式把一套方法封裝起來,使用者不需要知道具體的實現細節。class letterprocessimpl object def writecontext self,...
設計模式之門面模式
模式定義 為子系統中的一組介面提供乙個統一的高層介面,使子系統更容易使用。該模式通過外觀介面與子系統 互動,而不與具體的子系統中的細節互動。分層結構 mvc web應用中的三層結構 遵循原則 迪公尺特原則 最少知識原則,你不需要知道的你就不要知道,你知道幹什麼?封裝變化部分。適用場合 1 乙個系統複...
設計模式之門面模式
外觀模式定義了乙個高層介面,讓子系統更容易使用 結構性場景 有個 允許使用者用自己的積分來兌換商店內禮物,兌換需要經過校驗積分,支付積分,生成訂單的過程,單對呼叫兌換積分的介面來說不用關心裡面的三個過程,只需關心呼叫兌換積分的介面 新建積分兌換禮物實體類 package com.tangbaobao...