門面模式,又稱外觀模式.其定義是:"外部與一個子系統的通信必須通過一個統一的門面對象進行"
我們可以把它理解為一個只有一個單例的門面類
當然,一個由多個子系統組成的大系統,可以有多個門面類
基於對定義的理解,我們認為門面模式的主要目的是為了清理客戶使用接口,對實現的接口的精簡.雖然不符合接口隔離原則,但是如果合理的使用此模式,對軟件系統的設計還是蠻有好處.
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門面類的相關方法