美文网首页
外观模式

外观模式

作者: 贾里 | 来源:发表于2017-08-07 15:38 被阅读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.总结

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

    • JDBC封装后的,commons提供的DBUtils类
    • Hibernate提供的工具类,Spring JDBC工具类等

    Android中

    • context中封装了很多操作,只需要调用context就可以做很多事情;
    • imageloader

    相关文章

      网友评论

          本文标题:外观模式

          本文链接:https://www.haomeiwen.com/subject/bpfmlxtx.html