程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 門面模式(Facade)

門面模式(Facade)

編輯:關於C++
門面模式,又稱外觀模式.其定義是:"外部與一個子系統的通信必須通過一個統一的門面對象進行"
我們可以把它理解為一個只有一個單例的門面類
當然,一個由多個子系統組成的大系統,可以有多個門面類

基於對定義的理解,我們認為門面模式的主要目的是為了清理客戶使用接口,對實現的接口的精簡.雖然不符合接口隔離原則,但是如果合理的使用此模式,對軟件系統的設計還是蠻有好處.

1.結構(如下圖)
vcfJq7vhvavL+dPQtNO/zbuntsu3osC0tcTH68fzzq/FybW9z+DTprXE19PPtc2zyKWhozxicj4KMS4y19PPtc2zKHN1YnN5c3RlbSm9x8mrOr/J0tTTw8qx09DSu7j2u/LV37bguPbX08+1zbMuw7/Su7j219PPtc2ztryyu8rH0ru49rWltsC1xMDgLLb4ysfSu7j2wOC1xLyvus+ho8O/0ru49tfTz7XNs7a8v8nS1LG7v827p7bL1rG907X308Msu/LV37G7w8XD5r3Hyau199PDoaPX08+1zbOyorK71qq1wMPFw+a1xLTm1NosttTT2tfTz7XNs7b40dQsw8XD5r32vfbKx8Ht0ru49r/Nu6e2y7b40tE8YnI+Cjxicj4KMi7KtcD9PGJyPgogINK7vNLSvdKpuavLvizTydChseS08yzG5NOm08PX08+1zbOho7K7ts/U9rzTLsi7tvgsuPe49tfTz7XNs7XEtcfCvLj3tsDBoi7V4r2ruPi5q8u+tcS53MDt0+vQxc+isLLIq7e9w+a0+MC00v67vC7Su7j2us/A7bXEuea7rr/J0tTKuSzOqtSxuaTJ6LzG0ru49ta70OjNs9K7tcfCvNK7tM68tL/JvfjI67bguPbX08+1zbO1xLWlteO1x8K8uabE3CzS1L21tc3By7CyyKu1xLfWz+26zbncwO21xM/7usQuyei8xs280M7I58/CPGJyPgo8aW1nIHNyYz0="/uploadfile/Collfiles/20150303/20150303103511226.png" alt="\">
2.1醫藥公司單點登錄接口即Facade接口。子系統
2.2子系統1、子系統2、子系統3、子系統4、子系統....,即子系統

門面模式具備以下的一些優勢:
1.門面模式,通過隱藏子系統的組件,降低客戶處理對象數量,以提高各個子系統的應用便捷性
2.門面模式降低子系統於客戶端程序的耦合度,促進了系統的可擴展性和可維護性。
3.門面模式通過層次化的結構方式可提升系統的穩定性
基於以上幾點,我認為在以下級種情形下采用門面模式進行如軟件設計與實施
1.當設計者要求隱藏舊系統時,克使用門面模式的接口去實餡喎?/kf/yidong/wp/" target="_blank" class="keylink">WPGJyPgoyLsjnufvX08+1zbPWrrzktcTSwMC10NS9z7jfLL/Jzai5/cPFw+bEo8q9vfjQ0L21tc08YnI+CjMutbHX08+1zbPP4LWxuLTU08qxLL/Jzai5/cPFw+bEo8q9zOG5qb3PvPK1pbXEvdO/2izS1MzhuN/Wwc+1zbO1xNLX08PQ1NPrzsi2qNDUPGJyPgo8YnI+CtOm08Ozob6wo7o8YnI+CtPDteex5Lj8oaLTw7XnsajP+qGi08O159T2yN2hori2t9G1yMrHtefBprmry77Tqs/6z7XNs7XEuPe49tOqz/rStc7x19PPtc2zLLnCudGy0LyywM/Iy9PJ09rJ7czl1K3S8iyw7MDttMvA4NK1zvG3x7Ojsrux46GjzqrBy73ivvbV4tK7zsrM4iy158GmuavLvr/Jzai5/cno1sPJz8PFt/7O8S7TycnPw8W3/s7xyMvUsSzOqrnCudGy0LyywM/Iy7T6sOzTw7XnseS4/KGi08O157Go0N6hotPDtefU9sjdoaK4trfR0rXO8aGjucK50bLQvLLAz8jL1LHT68nPw8W3/s7xyMvUscGqz7Whozxicj4KPGJyPgo8aW1nIHNyYz0="/uploadfile/Collfiles/20150303/20150303103512227.png" alt="\">

實例代碼如下:
package model.facade;
/*
 *電力營銷業務接口
 */
public interface IElectricPowerMarketing {
	
	//代辦用電變更
	public String electricityChange();
	
	//用電報修
	public String electricityBuild();
	
	//用電增容
	public String electricityAmplitude();
	
	//付費
	public String pay();
}
package model.facade;

/*
 * 電力營銷業務的實現類
 */
public class IElectricPowerMarketingImpl implements IElectricPowerMarketing{
	
	//用電增容
	public String electricityAmplitude() {
		String a = "代辦用電增容...";
		System.out.println(a);
		return a;
	}
	
    //用電報修
	public String electricityBuild() {
		String a = "代辦用電報修...";
		System.out.println(a);
		return a;
	}
 
	//用電變更
	public String electricityChange() {
		String a = "代辦用電變更...";
		System.out.println(a);
		return a;
	}
    
	//代辦用點付費
	public String pay() {
		String a = "代辦用電付費...";
		System.out.println(a);
		return a;
	}

}

package model.facade;
/*
 * 代辦人類
 */
public class PublicAgent {
	
	private IElectricPowerMarketing electricPowerMarketing = new IElectricPowerMarketingImpl();
	
	//上門服務人員,為孤寡殘疾老人提供辦理、用電保修、用電增容用電變更、付費業務一體化服務
	public String sendElectricity(){
		return electricPowerMarketing.electricityChange()
		+electricPowerMarketing.electricityBuild()
		+electricPowerMarketing.electricityAmplitude()
		+electricPowerMarketing.pay();
	}
}

package model.facade;
/*
 * 客戶端程序
 */
public class Client {
	
	public static void main(String[] args) {
		//上門服務代理人
		PublicAgent agent = new PublicAgent();
		agent.sendElectricity();
	}
}



門面模式在String與Hibernate中的應用,如果軟件設計開發人員運用HibernateTemplate的find()方法進行信息,那麼此代碼就可以獲取信息搜索返回List.但是find()方法其實未將以下代碼進行公開
Session sn= new sf.OpenSessio();
Query qe = sn.createQuery(hql);
for(int a = 0; a qe.setParamenter(a,object)
}
qe.list();

從此處代碼可以看出,HibernateTemplate類包含了SessionFactory、Session、Query等各種類的門面,它使客戶端代碼實現持久化查詢時,僅需調用HibernateTemplate門面類的相關方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved