門面模式 :爲子系統構建與外部系統交互的統一界面。
門面模式的優點,我認爲有兩點:
1:解耦各個子系統,減少子系統與外部系統調用時的頻繁調用,
2:屏蔽子系統內的方法,這樣就可以儘量少的向外部系統暴露方法。
例子:
向養牛場送貨
類圖;
Facade角色:Guard門衛,負責與內部系統的交互,即與倉庫保管員與獸醫站人員的交互
子系統角色:Verterinary獸醫 WareHouse倉庫保管員,負責各個子系統的操作
門衛,爲貨物進行分類,分別調用子系統 , Guard類
package facade;
/**
* 此時門衛相當於一個Facade角色
* @author wang
*
*/
public class Guard {
public void purChase(){
//如果是獸藥,通知獸醫站
Veterinary nary = new Veterinary();
nary.purChase();
//如果是飼料,通知倉庫保管員
WareHouse ware = new WareHouse();
ware.purChase();
}
}
獸醫類,接收藥物分類放置,同時要通知倉庫保管員更新庫存記錄,Verterinary類
package facade;
/**
* 獸醫進貨,要將藥物放在獸醫站
* @author wang
*
*/
public class Veterinary {
WareHouse ware = new WareHouse();
public void purChase(){
System.out.println("放在獸醫站");
ware.updateRecord();
}
}
package facade;
/**
* 倉庫保管員進貨,要將貨物放在物資倉庫
* @author wang
*
*/
public class WareHouse {
public void updateRecord(){
System.out.println("更新記錄表");
}
public void purChase(){
System.out.println("放進物資倉庫");
}
}
送貨員類,此時相當於外部系統,其只要通知門衛即可,不需要知道工廠的內部結構,Delivery類
package facade;
/**
* 送貨員相當於外部系統,此時只需要通知門衛即可,具體貨物送到獸醫站還是物資倉庫由門衛通知內部人員即可
* @author wang
*
*/
public class Delivery {
public static void main(String args[]){
Guard guard = new Guard();
guard.purChase();
}
}