設計模式-門面模式

來源:《設計模式之禪》java

定義:門面模式也叫外觀模式,要求一個子系統的外部與其內部通訊必須經過一個統一的對象進行。也就是提供一個訪問子系統的接口,除了這個接口不容許任何有任何訪問子系統的行爲發生。設計模式

門面模式角色:安全

  1. facade 門面角色:客戶端調用這個角色訪問子系統。設計

  2. subsystem 子系統角色: code

類圖:對象

代碼:接口

子系統對象io

/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 子系統對象
 */
public class ClazzA {
	public void option() {
		System.out.println("###ClazzA.option...");
	}
}
/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 子系統對象
 */
public class ClazzB {
	public void option() {
		System.out.println("###ClazzB.option...");
	}
}
/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 子系統對象
 */
public class ClazzC {
	
	public void option() {
		System.out.println("###ClazzC.option...");
	}
}

門面對象:class

/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 門面對象
 */
public class Facade {
	ClazzA clazzA = new ClazzA();
	ClazzB clazzB = new ClazzB();
	ClazzC clazzC = new ClazzC();
	
	public void optionA() {
		clazzA.option();
	}
	
	public void optionB() {
		clazzB.option();
	}
	
	public void optionC() {
		clazzC.option();
	}
}

場景類:擴展

/**
 * 
 */
package cc.rico.pattern.facade;

/**
 * @author rico
 * 場景類
 */
public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Facade facade = new Facade();
		
		facade.optionA();
		//facade.optionB();
		//facade.optionC();
	}

}


門面模式優勢:

  1. 減小系統的互相依賴。依賴轉換爲對門面對象的依賴,與子系統無關。

  2. 提升靈活性。減小依賴,提升靈活。

  3. 提升安全性。只能訪問門面對象暴露的訪問接口。

門面模式缺點:

     不符合開閉原則,對修改關閉,對擴展開放,門面對象出現問題,只能對門面對象進行修改。

使用場景:

  1. 爲一個複雜的模塊或子系統提供一個供外部訪問的接口。

  2. 子系統相對獨立,外界對子系統的訪問只須要黑箱操做便可。

  3. 預防低水平開放人員誤操做。

注意事項:

  1. 一個子系統能夠有多個門面,

    • 門面太龐大,根據功能劃分門面

    • 子系統提供不一樣的訪問路徑。

  2. 門面不參與子系統的業務邏輯,新建一個封裝類,將這個封裝類傳遞給門面對象。

擴展:

相關文章
相關標籤/搜索