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类交互即可。

      - 更好的划分访问层次

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

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

  • 相关阅读:
    Linux基础(14)进程通信 IPCs
    Linux基础(13)进程基础
    Linux基础(10)AIO项目设计与POSIX文件操作和目录管理
    Linux基础(09)aio高级编程
    Linux基础(08)信号通信机制
    Linux基础(06)IO复用
    Linux基础(05)socket编程
    LInux基础(04)项目设计一(理解链表管理协议的代码架构)
    C#关于一个程序,只可以有一种实例的方法
    C#application.exit()和environment.Exit(0)比较
  • 原文地址:https://www.cnblogs.com/ningbeibei/p/14133741.html
Copyright © 2011-2022 走看看