您的位置:首页 > 其它

外观模式(Facade)

2013-06-07 23:26 405 查看

前提

        先要假设一个情景,当然不一定准确。一个地主想吃一个菜,他首先要叫佣人去买菜,然后叫保姆洗菜,最后叫厨师做菜。这样他才能吃到菜。

package demo.facade;

/**
 * 佣人
 * @author Martin
 * create by 2013-6-7
 * update by 2013-6-7
 */

public class Servant {

    public void bugVegetables() {
        System.out.println("蔬菜买好了。。");
    }
}

package demo.facade;

/**
 * 保姆
 * @author Martin
 * create by 2013-6-7
 * update by 2013-6-7
 */

public class Nanny {

    public void washVegetables() {
        System.out.println("蔬菜洗好了。。");
    }
}

package demo.facade;

/**
 * 厨师
 * @author Martin
 * create by 2013-6-7
 * update by 2013-6-7
 */

public class Cook {

    public void cookVegetables() {
        System.out.println("蔬菜烧好了。。");
    }
}

最后就是地主要分别叫他们干事了。

package demo.facade;

/**
 * 地主
 * @author Martin
 * create by 2013-6-7
 * update by 2013-6-7
 */

public class Landload {

    public static void main(String[] args) {
        Servant servant = new Servant();
        System.out.print("佣人说:");
        servant.bugVegetables();
        
        Nanny nanny = new Nanny();
        System.out.print("保姆说:");
        nanny.washVegetables();
        
        Cook cook = new Cook();
        System.out.print("厨师说:");
        cook.cookVegetables();
        
        System.out.println("地主吃到菜了。。");
    }
}

输出结果

佣人说:蔬菜买好了。。

保姆说:蔬菜洗好了。。

厨师说:蔬菜烧好了。。

地主吃到菜了。。

问题

        一段时间后,地主觉得不太对劲。他要吃一个菜,需要监督的人太多了。他就想,如果我想吃一个菜,然后就有一个人把我想吃的菜送来就好了。于是地主就顾了一个管家。然后地主跟管家说,做一个菜给我吃。

package demo.facade;

/**
 * 地主
 * @author Martin
 * create by 2013-6-7
 * update by 2013-6-7
 */

public class Landload {

    public static void main(String[] args) {
        Steward steward = new Steward();//管家
        steward.createFood();
        
        System.out.println("地主吃到菜了。。");
    }
}

package demo.facade;

/**

 * 管家

 * @author Martin

 * create by 2013-6-7

 * update by 2013-6-7

 */

public class Steward {

    public void createFood() {

        Servant servant = new Servant();

        System.out.print("佣人说:");

        servant.bugVegetables();

        

        Nanny nanny = new Nanny();

        System.out.print("保姆说:");

        nanny.washVegetables();

        

        Cook cook = new Cook();

        System.out.print("厨师说:");

        cook.cookVegetables();

    }

}

        哈哈,地方很高兴。因为他只要告诉管家,他想吃菜就有菜吃了。至于管家怎么监督工人和工人劳动的顺序,地主不用管。 在这里,管家就是一个外观模式。

好处

        1、减少系统交互

                地主本来需要很佣人、保姆、厨师交互,但现在只需要和管家交互就可以了。

        2、不需要知道模块的顺寻

                地主本来需要知道先要佣人买菜,保姆洗菜,厨师做菜。但现在只需要和管家说一下,至于是先洗菜还是先买菜,地主根本不需要知道。

类图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息