zoukankan      html  css  js  c++  java
  • java23种设计模式-结构型模式-外观模式

    一、定义

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

    二、优点及缺点

    优点:

    1、减少系统相互依赖。

    2、提高灵活性。

    3、提高了安全性。

    缺点:

    1、不符合开闭原则,更改东西比较复杂。

    三、代码实现:

    三个子系统角色:

    package com.example.demo.sjms.waiguanmoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月19日 19:10:47
     *  @Description: 类A
     */
    public class ClassA {
        public void methodA(){
            System.out.println("这是方法methodA!!!");
        }
    }
    package com.example.demo.sjms.waiguanmoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月19日 19:10:47
     *  @Description: 类B
     */
    public class ClassB {
        public void methodB(){
            System.out.println("这是方法methodB!!!");
        }
    }
    package com.example.demo.sjms.waiguanmoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月19日 19:10:47
     *  @Description: 类C
     */
    public class ClassC {
        public void methodC(){
            System.out.println("这是方法methodC!!!");
        }
    }

    外观者角色:

    package com.example.demo.sjms.waiguanmoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月19日 19:10:23
     *  @Description: 外观者
     */
    public class Facade {
        private ClassA classA;
        private ClassB classB;
        private ClassC classC;
        public Facade(){
            this.classA = new ClassA();
            this.classB = new ClassB();
            this.classC = new ClassC();
        }
        // 统一方法
        public void allMethod(){
            classA.methodA();
            classB.methodB();
            classC.methodC();
        }
    }

    测试方法:

    package com.example.demo.sjms.waiguanmoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年10月19日 19:10:48
     *  @Description: 测试类
     */
    public class Test {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.allMethod();
        }
    }

    四、源码级别

    1、java中的Class类:

     方法调用了ClassLoader、System的方法。

    2、javax.faces.webapp.FacesServlet

    FacesServlet实现了Servlet接口,在实现方法service()中调用了HttpServletRequest、HttpServletResponse、ApplicationContext接口的方法。

    五、总结

    使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

  • 相关阅读:
    本地坐标转世界坐标为什么是 先缩放后旋转再平移
    cocos子节点转父节点坐标 原理浅析(局部坐标转世界坐标同理)
    Github上关于iOS的各种开源项目集合2(强烈建议大家收藏,查看,总有一款你需要)
    Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
    Masonry基本语法
    WebStorm 10.0.4注册码
    如何让CCLayer创造的地图,左右滑动不出现黑边
    GitHub 上排名前 100 的 Objective-C 项目简介
    C语言fmod()函数:对浮点数取模(求余)
    查看笔记本最大支持内存
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13842258.html
Copyright © 2011-2022 走看看