门面模式(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();
	}
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值