門面模式(Facade)(外觀模式)—向養牛場送貨

門面模式 :爲子系統構建與外部系統交互的統一界面。

門面模式的優點,我認爲有兩點:

   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();
	}
	
}


倉庫保管員類,此時更新倉庫記錄方法不用暴露給外部系統,只提供給內部系統調用,WareHouse類

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();
	}
	
}



發佈了50 篇原創文章 · 獲贊 17 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章