設計模式:外觀模式(門面模式)
阿新 • • 發佈:2019-01-08
外觀模式也叫門面模式, 它為子系統提供統一入口,封裝系統複雜性。如同醫院看病,病人需要與掛號,門診,劃價,化驗,收費,取藥等部門打交道
如同一個子系統客戶端和另一個子系統各個類打交道一樣,相互耦合處理複雜,如果引入門面模式,在醫院增加一個接待員,由接待員複製與上面各個
部門打交道,那麼對於病人這個客戶端來說就容易很多。
門面模式主要就兩個角色。
門面角色:客戶端呼叫該角色方法。該角色包好各子系統的功能。
子系統角色:完成子系統各功能
例子:模擬註冊公司流程
1:未使用門面模式時,流程圖如下
2.使用了門面模式後(增加門面物件)
interface GongShang { boolean checkName(); } /** * 模擬工商局 */ public class BeijinGongShang implements GongShang{ @Override public boolean checkName() { System.out.println("北京工商局檢查"); return false; } }
interface ShuiWu { boolean checkCertificate(); } /** * 模擬稅務局 */ public class BeijinShuiWu implements ShuiWu { @Override public boolean checkCertificate() { System.out.println("北京稅務局"); return false; } }
interface Zhijian{ boolean checkType(); } public class BeijinZhijian implements Zhijian{ @Override public boolean checkType() { System.out.println("北京質監局"); return false; } }
/** * 辦理註冊公司流程的門面物件 * */ public class RegisterFacade { public void register(){ GongShang a = new BeijinGongShang(); a.checkName(); Zhijian b = new BeijinZhijian(); b.checkType(); ShuiWu c = new BeijinShuiWu(); c.checkCertificate(); } }
public class Client { public static void main(String[] args) { //使用門面模式只需要呼叫門面角色的方法 new RegisterFacade().register(); } }
從上面的例項來看,有了這個門面類,也就是RegeisterFacader類,使用者就不用親自去呼叫子系統中類了,不需要知道系統內部的實現細節,甚至都不用知道系統內部的構成。
客戶端只需要跟門面類互動就可以了。