zoukankan      html  css  js  c++  java
  • java设计模式-外观模式

    一,概念介绍

      外观模式(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();
        }
    
    }

    第四步:测试类编写

    package test;
    
    /**
     * 测试类
     * @author ningbeibei
     *
     */
    public class test1 {
    
        //测试方法
        public static void main(String[] args) {
            
            /**客户端在调用这个三个系统时只需要通过Facade
             * 这个接口就可以访问各个系统得方法*/
            Facade fac = new FacadeImpl();
            fac.methodA();
            fac.methodB();
            fac.methodC();
        }
    
    }

    运行结果

    三、优点

      - 松散耦合

      使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

      - 简单易用

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

      - 更好的划分访问层次

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

    四、我写得不足之处望各位批评指正

  • 相关阅读:
    operation not possible due to RF-kill
    kali linux karmetasploit配置【续】
    kali linux karmetasploit配置
    转 15款免费WiFi(入侵破解)安全测试工具
    利用NTFS交换数据流隐藏文件
    droidbox官网
    Linux安装IDA神器
    Linksys WRT120N路由器备份文件解析
    设置主机只对网关的报文进行响应
    MySQL无法存储emoji表情方案
  • 原文地址:https://www.cnblogs.com/ningbeibei/p/14133741.html
Copyright © 2011-2022 走看看