facade 门面(外观)模式

2018-02-14  本文已影响11人  当当一丢丢
场景分析
角色定义
代码展示
public class Fish {

    //把鱼腌一下
    public void pickleFish() {
        System.out.println("腌鱼");
    }

    //煎鱼
    public void fryFish() {
        System.out.println("煎鱼");
    }
}
/**
 * 姜
 */
public class Ginger {

    //放入姜片
    public void fryGinger(){
        System.out.println("热油放入姜片");
    }
}

/**
 * 辣椒
 */
public class Pepper {
    //放入辣椒
    public void fryPepper() {
        System.out.println("炒辣椒");
    }
}
/**
 * 定义红烧鱼的facade
 */
public class FishFacade {

    //把材料准备好:鱼,辣椒,姜片
    private Fish fish;
    private Ginger ginger;
    private Pepper pepper;

    //准备材料
    public FishFacade() {
        //定义材料
        fish = new Fish();
        ginger = new Ginger();
        pepper = new Pepper();
    }

    //红烧鱼有若干步骤的,这里将所有分散步骤统一
    //该方法即所谓的 facade,以煎鱼为整体功能模块,封装了很多繁杂的环节,避免Client 直接各自调用
    //这里我们只是定义菜料,有可能中间还要让老婆帮忙系下围裙,或者让儿子买包盐去呢
    //总之是很多繁杂的逻辑
    public void fryFish() {
        //先把鱼腌一下
        fish.pickleFish();
        //放入辣椒
        pepper.fryPepper();
        //放入姜片
        ginger.fryGinger();
        //煎鱼
        fish.fryFish();
    }

}
public class FacadeDemo {

    public static void main(String[] args) {
        
        FishFacade fishFacade = new FishFacade();
        
        //调用 facade
        fishFacade.fryFish();
        
        //如果不使用 facade 则 单步执行
        //腌鱼
        //fish.pickleFish();
        
        //油放姜片
        //ginger.fryGinger();
        
        //油放辣椒
        //pepper.fryPepper();
        
        //煎鱼
        //fish.fryFish();
    }

}
优缺点
其他注意点

参考:http://blog.csdn.net/xingjiarong/article/details/50066133

上一篇 下一篇

猜你喜欢

热点阅读