外观模式(Facade)

来源:互联网 发布:淘宝自动发货机器人 编辑:程序博客网 时间:2024/06/06 04:50

前提

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

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、不需要知道模块的顺寻

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

类图


原创粉丝点击