外观模式

2017-08-07  本文已影响25人  贾里

定义:

要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。

外观模式.png

例子1:
日常中可以打电话、拍照、微信聊天等,没有智能手机之前,这些事情都是分开做的,现在有了智能手机。
你只需要通过调用手机这个统一对象,就可以干所有事情,而且不必知道里面的构造和实现。

例子2:股民炒股
未使用外观模式情况

1.png

要让股民尽可能少的与股票直接打交道,给其提供一个蒙面,让股民跟蒙面打交道。这样就符合了迪米特法则,让股民尽可能少的与股票打交道了。增加了外观模式后的类图:

2.png

2.实现代码

未使用外观模式情况下,代码如下
子系统代码:

public class SubSystemClass {
    public void methodOne(){
        System.out.println("子系统方法1");
    }
}
class SubSystemClass2{
    public void methodTwo(){
        System.out.println("子系统方法2");
    }
}
class SubSystemClass3{
    public void methodThree(){
        System.out.println("子系统方法3");
    }
}

客户端

public static void main(String[] args) {
    //未使用外观模式情况
    SubSystemClass s1 = new SubSystemClass();
    SubSystemClass2 s2 = new SubSystemClass2();
    SubSystemClass3 s3 = new SubSystemClass3();
    s1.methodOne();
    s2.methodTwo();
    s3.methodThree();
     
}

使用外观模式:新增一个Facade类

/**
 * 外观模式:封装子系统,对外提供一个门面方法
 */
public class Facade {
    //所有子系统的引用
    private SubSystemClass s1 = null;
    private SubSystemClass2 s2 = null;
    private SubSystemClass3 s3 = null;
    //构造子系统的引用
    public Facade() {
        this.s1 = new SubSystemClass();
        this.s2 = new SubSystemClass2();
        this.s3 = new SubSystemClass3();
    }
    /**
     * 具体的外观方法
     */
    public void facade(){
        s1.methodOne();
        s2.methodTwo();
        s3.methodThree();
    }
}

客户端

public static void main(String[] args) {       
    //使用了外观模式后
    System.out.println("-----------------------");
    Facade facade = new Facade();
    facade.facade();
}

两次的输出结果为:

            子系统方法1

            子系统方法2

            子系统方法3

            -----------------------

            子系统方法1

            子系统方法2

            子系统方法3

3.总结

其实外观模式就是我们常见的封装,在我们实际开发中,遇到的各种对子系统各模块封装的逻辑,都可以理解为外观模式

Android中

上一篇下一篇

猜你喜欢

热点阅读