• 设计模式之外观模式


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

    UML类图:

    具体代码:

    public class Client {
        public static void main(String[] args) {
            SubSystemOne one = new SubSystemOne();
            SubSystemTwo two = new SubSystemTwo();
            System.out.println("原始方式开始");
            one.methodOne();
            two.methodTwo();
            System.out.println("原始方式结束");
    
            System.out.println("外观模式开始");
            Facade facade = new FacadeImpl(one, two);
            facade.methodFacade();
            System.out.println("外观模式结束");
    
        }
    }
    
    public interface Facade {
        void methodFacade();
    }
    
    public class FacadeImpl implements Facade {
        private SubSystemOne one;
        private SubSystemTwo two;
        FacadeImpl(SubSystemOne one, SubSystemTwo two) {
            this.one = one;
            this.two = two;
        }
        @Override
        public void methodFacade() {
            one.methodOne();
            two.methodTwo();
        }
    }
    
    public class SubSystemOne {
        public void methodOne() {
            System.out.println("SubSystemOne-methodOne");
        }
    }
    
    public class SubSystemTwo {
        public void methodTwo() {
            System.out.println("SubSystemTwo-methodTwo");
        }
    }
    
    原始方式开始
    SubSystemOne-methodOne
    SubSystemTwo-methodTwo
    原始方式结束
    外观模式开始
    SubSystemOne-methodOne
    SubSystemTwo-methodTwo
    外观模式结束

    模块说明:
    Facade:
    客户端通过此角色能了解到子系统提供的功能,此角色会委派任务到相应的子系统中去

    SubSystem:
    子系统不是单独的类,而是类的集合。负责提供业务逻辑,对子系统来说Facade就是它的一个客户端

    例子:
    1.外观模式就相当于一体机,而原始的情况就相当于DIY组装机器。
    2.编译器对于程序员来说就是外观模式,封装了编译的各个组件。
    3.出去吃饭和自己买菜做饭,出去吃就是外观,全部交给服务员。而自己做的话就是一点点组装。

    适用场景:
    外观模式它通过引入一个外观角色来简化客户端与子系统之间的交互,
    为复杂的子系统调用提供一个统一的入口,使子系统与客户端的耦合度降低,且客户端调用非常方便。
    外观模式并不给系统增加任何新功能,它仅仅是简化调用接口。

    优缺点:
    优点:
    松耦合
    简单易用
    更好的划分访问层次
    缺点:
    不能很好地限制客户端直接使用子系统类
    如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则

    总结:
    封装复杂交互,使客户端调用变的简单。

  • 相关阅读:
    图片自适应居中
    常用正则记录
    继承
    HTML学习
    js原型与原型链理解
    mac 及mac下开发常用快捷键命令
    服务器返回的各种HTTP状态码介绍(转)
    webstorm使用笔记
    《Javascript Dom 高级程序设计》读书笔记
    ECMAScript6学习笔记
  • 原文地址:https://www.cnblogs.com/daily-note/p/7237812.html
Copyright © 2020-2023  润新知