门面模式 :为子系统构建与外部系统交互的统一界面。
门面模式的优点,我认为有两点:
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();
}
}