門面模式原理及其示例分析
- 前言
- 什么是門面模式
- 門面模式角色
- 門面模式示例
- 門面模式應用場景
- 門面模式優缺點
- 總結
前言
提到設計模式,可能有的人就會覺得很抽象,很高深的樣子,其實設計模式并沒有想象中的那么高深,很多設計模式我們天天都在用,只是自己不知道自己用到的就是設計模式而已,設計模式也是在開發的基礎上總結歸納得出來的,并不是什么新穎的東西,只是一種經驗的總結而已,如果有覺得設計模式高深莫測的朋友,那么看看這篇門面模式我想一定會改變你的觀點,門面模式會讓你發出“這也是設計模式?”的感慨,
什么是門面模式
門面模式(Facade Pattern),又被稱之為外觀模式,門面模式提供了一個統一的介面,這個介面可以用來訪問相同子系統或者不同子系統之中的一群介面,門面模式使得系統更加容易呼叫,屬于結構型模式,
門面模式角色
門面模式主要包含了兩種角色:
- 外觀角色(Facade):也稱門面角色,系統對外統一介面,
- 子系統角色(SubSystem):可以同時有一個或者多個SubSystem,每個SubSystem都不是一個單獨的類,而是一個類的集合,SubSystem并不知道Facade的存在,對于SubSystem而言,Facade也僅僅只是一個呼叫者(客戶端)而已,
門面模式示例
好了,裝逼時刻又到了:Talk is cheap,Show you the code,先看一個非常簡單的例子,
1、新建2個子系統角色類,每個類中都只有一個方法:
package com.zwx.design.pattern.facade;
public class SubSystemA {
public void doSomething(){
System.out.println("I'm A");
}
}
package com.zwx.design.pattern.facade;
public class SubSystemB {
public void doSomething(){
System.out.println("I'm B");
}
}
2、新建一個門面類來統一提供對外呼叫子系統介面的方法:
package com.zwx.design.pattern.facade;
public class SimpleFacade {
private SubSystemA systemA = new SubSystemA();
private SubSystemB systemB = new SubSystemB();
public void doA(){
this.systemA.doSomething();
}
public void doB(){
this.systemB.doSomething();
}
}
3、最后新建測驗類:
package com.zwx.design.pattern.facade;
public class TestSimpleFacade {
public static void main(String[] args) {
SimpleFacade simpleFacade = new SimpleFacade();
simpleFacade.doA();
simpleFacade.doB();
}
}
測驗類中不會直接呼叫子系統,而是通過門面類來進行統一呼叫,
看完這個例子,大家應該會發出感慨了,這種方式我們天天都在用,原來居然就是設計模式之一的門面模式,
還有另一種寫法就是假如我們一個流程里面需要很多個子系統的方法一起呼叫才能完成,那么這時候我們就可以對上面的示例進行改造了,如下我們再新建一個門面類:
package com.zwx.design.pattern.facade;
public class Facade {
private SubSystemA systemA = new SubSystemA();
private SubSystemB systemB = new SubSystemB();
public void doAB(){
this.systemA.doSomething();
this.systemB.doSomething();
}
}
然后測驗類中就可以直接通過呼叫一個方法達到呼叫多個子系統的方法完成一個流程:
package com.zwx.design.pattern.facade;
public class TestFacade {
public static void main(String[] args) {
Facade facade = new Facade();
facade.doAB();
}
}
門面模式應用場景
門面模式一般可以適用于以下兩種場景:
1、當各個子系統越來越復雜時,可以提供門面介面來統一呼叫
2、構建多層系統結構時,利用門面物件來作為每層的入口,這樣可以簡化分層間的介面呼叫
門面模式優缺點
優點:
- 1、簡化了呼叫程序,呼叫者無需深入了解子系統,以防給子系統帶來風險
- 2、減少了系統間的依賴,松散了耦合度
- 3、將系統劃分了層次,提高了安全性
- 4、遵循了迪米特法則(即最少知道原則)
缺點:
- 1、當增加子系統或者擴展子系統功能時,可能容易帶來未知風險
- 2、不符合開閉原則
- 3、某些情況下可能會違背單一職責原則
總結
本文主要分析了門面模式及其示例,希望通過本文可以讓大家體會到設計模式并沒有想象中的那么高深,學習設計模式主要是體會其中的思想,然后在適當的時候可以提升我們運用到我們代碼中,
請關注我,和孤狼一起學習進步,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/148572.html
標籤:java
上一篇:協程實作網路服務器
