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、预防低水平人员带来的风险。

  • 相关阅读:
    java中继承和多态的理解
    汽车租赁系统
    s2第六章继承和多态
    第三章泛型集合ArrayList 和Hashtable
    第二章项目总结
    s2第二章深入c#类型
    .NET平台
    航班查询系统
    java初始重点语法
    JDBC
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13842258.html
Copyright © 2011-2022 走看看