概述

门面(Facade)模式(也叫外观模式),为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

如上图所示,如果不提供统一的接口,子系统外面的系统要与里面的打交道,这样会导致逻辑很混乱。比如玩游戏机,没有给你手柄,而是让你操作电路板,那样也太复杂了。

而一旦实现门面模式,只需要与子系统的统一接口打交道即可以了。

示例

举一个简单的例子,早些年黄牛盛行的时候,买火车票可不太容易,这时候就诞生了一个新兴行业:代买火车票。你只要把钱给她,一切不用你担心,剩下的又他来完成。

这里面的代买火车票者,就相当于那个接口。

package com.ans;

class Queue {
    public void queue() {
        System.out.println("排队");
    }
}

class Buy {
    public void buy() {
        System.out.println("买票");
    }
}


class Take {
    public void take() {
        System.out.println("取票");
    }
}
//代买火车票
class Shopper {
    public void proxy() {
        new Queue().queue();
        new Buy().buy();
        new Take().take();
    }
}


public class FacadePattern {

    public static void main(String[] args) {
        new Shopper().proxy();
    }

}

运行结果:

排队
买票
取票

总结

门面模式的好处在于对于客户端子系统屏蔽了内部组件,减少客户单处理对象的数目,使客户端调用变的简单;将客户端和子系统解耦,子系统内部紧耦合,达到了系统设计的高内聚低耦合的要求。