門面模式也是結構型模式的一種。這裏要注意一下和代碼模式的區別,門面模式可能代理的是多個接口,而代理模式一般只是代理某一個接口。安全
門面模式有時候會被稱爲外觀模式,是一種比較經常使用的封裝模式。markdown
要求一個子系統的外部與其內部的通訊必須經過一個統一的對象進行,門面模式提供一個高層次的接口,使得子系統更易於使用。架構
門面模式注重 「統一的對象」,也就是提供一個訪問子系統的接口,除了這個接口不容許有任何訪問子系統的行爲發生。框架
當咱們須要用更統一的標準方式來與系統交互時,就能夠採用門面模式。好比,使用 Slf4j
日誌框架來統一 log4j
、log4j2
、CommonLog
等日誌框架。再好比,在支付時經過掃描二維碼來使用支付系統。對於用戶來講,他們並不關心後臺系統實現有多麼複雜,只關心最終可否支付成功。this
//子系統
public class ClassA{
public void doSomeThing(){
}
}
public class ClassB{
public void doSomeThing(){
}
}
public class ClassC{
public void doSomeThing(){
}
}
//門面系統
public class Facade{
//被委託的對象
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
//提供給外部訪問的方法
public void methodA(){
this.a.doSomeThingA();
}
public void methodB(){
this.b.doSomeThingB();
}
public void methodC(){
this.c.doSomeThingC();
}
}
複製代碼
爲一個複雜的模塊或子系統提供一個供外界訪問的接口,減小客戶端處理的系統數量spa
預防低水平人員帶來的風險擴散代理
爲了解決遺留系統重構的問題日誌
爲了解決分層架構中的擴展問題code
減小系統的相互依賴,阻止外部訪問直接深刻到子系統內部orm
提升了靈活性,無論子系統內部如何變化,只要不影響門面系統就好
提升安全性,子系統入口只有一個。
不符合開閉原則,並且門面系統不能輕易更改
下降了可靠性,門面系統掛了,全部子系統功能都將不可用