zoukankan      html  css  js  c++  java
  • 门面模式(外观模式)

    参考:http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html

    /DesignPatterns/src/com/louis/Facade/ModuleA.java

    /**
     * Project Name:DesignPatterns
     * File Name:ModuleA.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:17:32
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:ModuleA 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:17:32 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ModuleA {
        //示意方法
        public void testA(){
            System.out.println("调用ModuleA中的testA方法");
        }
    }

    /DesignPatterns/src/com/louis/Facade/ModuleB.java

    /**
     * Project Name:DesignPatterns
     * File Name:ModuleA.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:17:32
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:ModuleA 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:17:32 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ModuleB {
        //示意方法
        public void testB(){
            System.out.println("调用ModuleB中的testB方法");
        }
    }

    /DesignPatterns/src/com/louis/Facade/ModuleC.java

    /**
     * Project Name:DesignPatterns
     * File Name:ModuleA.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:17:32
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:ModuleA 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:17:32 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ModuleC {
        //示意方法
        public void testC(){
            System.out.println("调用ModuleC中的testC方法");
        }
    }

    /DesignPatterns/src/com/louis/Facade/Facade.java

    /**
     * Project Name:DesignPatterns
     * File Name:Facade.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:19:03
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:Facade 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:19:03 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Facade {
        public void test(){
            ModuleA a = new ModuleA();
            a.testA();
            ModuleB b = new ModuleB();
            b.testB();
            ModuleC c = new ModuleC();
            c.testC();
        }
    }

    /DesignPatterns/src/com/louis/Facade/Client.java

    /**
     * Project Name:DesignPatterns
     * File Name:Client.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:20:14
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:Client 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:20:14 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class Client {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.test();
        }
    }
      使用门面模式还有一个附带的好处,就是能够有选择性地暴露方法。一个模块中定义的方法可以分成两部分,一部分是给子系统外部使用的,一部分是子系统内部模块之间相互调用时使用的。
    有了Facade类,那么用于子系统内部模块之间相互调用的方法就不用暴露给子系统外部了。

    /DesignPatterns/src/com/louis/Facade/ModuleAA.java

    /**
     * Project Name:DesignPatterns
     * File Name:Module.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:25:11
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:Module 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:25:11 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ModuleAA {
         /**
         * 提供给子系统外部使用的方法
         */
        public void a1(){};
        
        /**
         * 子系统内部模块之间相互调用时使用的方法
         */
        public void a2(){};
        public void a3(){};
    }

    /DesignPatterns/src/com/louis/Facade/ModuleBB.java

    /**
     * Project Name:DesignPatterns
     * File Name:Module.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:25:11
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:Module 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:25:11 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ModuleBB {
         /**
         * 提供给子系统外部使用的方法
         */
        public void b1(){};
        
        /**
         * 子系统内部模块之间相互调用时使用的方法
         */
        public void b2(){};
        public void b3(){};
    }

    /DesignPatterns/src/com/louis/Facade/ModuleCC.java

    /**
     * Project Name:DesignPatterns
     * File Name:Module.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:25:11
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
    */
    
    package com.louis.Facade;
    /**
     * ClassName:Module 
     * Function: TODO ADD FUNCTION. 
     * Reason:     TODO ADD REASON. 
     * Date:     2017年11月2日 下午4:25:11 
     * @author   michael
     * @version  
     * @since    JDK 1.7
     * @see      
     */
    public class ModuleCC {
         /**
         * 提供给子系统外部使用的方法
         */
        public void c1(){};
        
        /**
         * 子系统内部模块之间相互调用时使用的方法
         */
        public void c2(){};
        public void c3(){};
    }

    /DesignPatterns/src/com/louis/Facade/ModuleFacade.java

    /**
     * Project Name:DesignPatterns
     * File Name:ModuleFacade.java
     * Package Name:com.louis.Facade
     * Date:2017年11月2日下午4:27:28
     * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved.
     *
     */
    
    package com.louis.Facade;
    
    /**
     * ClassName:ModuleFacade Function: TODO ADD FUNCTION. Reason: TODO ADD REASON.
     * Date: 2017年11月2日 下午4:27:28
     * 
     * @author michael
     * @version
     * @since JDK 1.7
     * @see
     */
    public class ModuleFacade {
        ModuleAA a = new ModuleAA();
        ModuleBB b = new ModuleBB();
        ModuleCC c = new ModuleCC();
    
        /**
         * 下面这些是A、B、C模块对子系统外部提供的方法
         */
        public void a1() {
            a.a1();
        }
    
        public void b1() {
            b.b1();
        }
    
        public void c1() {
            c.c1();
        }
    }
    这样定义一个ModuleFacade类可以有效地屏蔽内部的细节,免得客户端去调用Module类时,发现一些不需要它知道的方法。比如a2()和a3()方法就不需要让客户端知道,否则既暴露了内部的细节,又让客户端迷惑。对客户端来说,他可能还要去思考a2()、a3()方法用来干什么呢?其实a2()和a3()方法是内部模块之间交互的,原本就不是对子系统外部的,所以干脆就不要让客户端知道。

    门面模式在Tomcat中的使用

    参考:http://www.cnblogs.com/java-my-life/archive/2012/05/02/2478101.html

  • 相关阅读:
    苹果开发者账号多少钱?个人/公司/企业申请费用及怎么选【都有】
    uniapp ios真机调试【亲测有效】
    Uniapp---IOS打包证书私钥密码怎么获取?
    微信小程序地图计算两个点之间的距离
    各大地理坐标系互转
    解决mac下vscode等应用中vim光标无法快速移动
    python 脚本如何在后代运行并记录标准输出
    wkhtmltox 在Linux上安装
    shell中的##*,%%*问题
    matplotlib、seaborn 展示中文字体
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7772921.html
Copyright © 2011-2022 走看看