zoukankan      html  css  js  c++  java
  • 51

    一,概念介绍

    外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。

    二,代码实现

    直接上代码吧,边看代码遍理解概念,我觉得这样效果也不错,

    第一步:先定义系统A、系统B、系统C这三个类,

    复制代码
    package test;

    /**

    • A系统
    • @author ningbeibei

    */
    public class SystemA {
    //A系统方法
    public void functionA() {
    System.out.println(“我是系统A…”);
    }
    }
    复制代码
    复制代码
    package test;

    /**

    • B系统
    • @author ningbeibei

    */
    public class SystemB {
    //B系统方法
    public void functionB() {
    System.out.println(“我是系统B…”);
    }
    复制代码
    复制代码
    package test;

    /**

    • C系统
    • @author ningbeibei

    */
    public class SystemC {
    //C系统方法
    public void functionC() {
    System.out.println(“我是系统C…”);
    }
    }
    复制代码
    第二步:定义一个高层接口,分别声明调用三个子系统得方法

    复制代码
    package test;

    /**

    • 定义一个更高层得接口,使其实现类实现所有方法
    • @author ningbeibei

    */
    public interface Facade {
    //方法A
    void methodA();
    //方法B
    void methodB();
    //方法C
    void methodC();
    }
    复制代码
    第三步:实现定义得高层接口,并且持有子系统对象引用

    复制代码
    package test;

    /**

    • 实现我们刚才定义得高层接口中得方法
    • @author ningbeibei

    */
    public class FacadeImpl implements Facade {

    //这个系统需要实现类中持有他得引用。
    private SystemA systema;
    private SystemB systemb;
    private SystemC systemc;
    
    /**
     * 重写实现类构造方法,初始化这个三个类得对象
     */
    FacadeImpl(){
        systema = new SystemA();
        systemb = new SystemB();
        systemc = new SystemC();
        
    }
    
    //调用A系统方法
    @Override
    public void methodA() {
        systema.functionA();
    }
    //调用B系统方法
    @Override
    public void methodB() {
        systemb.functionB();
    }
    //调用B系统方法
    @Override
    public void methodC() {
        systemc.functionC();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    }
    复制代码
    第四步:测试类编写

    复制代码
    package test;

    /**

    • 测试类
    • @author ningbeibei

    */
    public class test1 {

    //测试方法
    public static void main(String[] args) {
        
        /**客户端在调用这个三个系统时只需要通过Facade
         * 这个接口就可以访问各个系统得方法*/
        Facade fac = new FacadeImpl();
        fac.methodA();
        fac.methodB();
        fac.methodC();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    }
    复制代码
    运行结果

    三、优点
      - 松散耦合
      使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

    - 简单易用
      客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。

    - 更好的划分访问层次
      有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

     
    二-十进制优先编码器74LS147multisim源文件,multisim10及以上版本可以正常打开仿真,是教材上的电路,可以直接仿真,方便大家学习
  • 相关阅读:
    Sort
    MyOD
    Linux C语言编程基础(必做)
    团队作业(一):团队展示
    2.3.1测试
    《Unix/Linux系统编程》第四章学习笔记
    课堂测试2
    课堂测试
    第三章 Unix/Linux进程管理学习笔记
    团队作业(二):需求分析
  • 原文地址:https://www.cnblogs.com/gd11/p/14217245.html
Copyright © 2011-2022 走看看