门面模式(Facade)(外观模式)—向养牛场送货

来源:互联网 发布:优尼凯珠宝软件使用 编辑:程序博客网 时间:2024/05/18 00:13

门面模式 :为子系统构建与外部系统交互的统一界面。

门面模式的优点,我认为有两点:

   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