1. 程式人生 > >設計模式:外觀模式(門面模式)

設計模式:外觀模式(門面模式)

  外觀模式也叫門面模式, 它為子系統提供統一入口,封裝系統複雜性。如同醫院看病,病人需要與掛號,門診,劃價,化驗,收費,取藥等部門打交道

如同一個子系統客戶端和另一個子系統各個類打交道一樣,相互耦合處理複雜,如果引入門面模式,在醫院增加一個接待員,由接待員複製與上面各個

部門打交道,那麼對於病人這個客戶端來說就容易很多。

門面模式主要就兩個角色。

門面角色:客戶端呼叫該角色方法。該角色包好各子系統的功能。

子系統角色:完成子系統各功能

 

例子:模擬註冊公司流程

  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類,使用者就不用親自去呼叫子系統中類了,不需要知道系統內部的實現細節,甚至都不用知道系統內部的構成。

客戶端只需要跟門面類互動就可以了。