• 设计模式-11-外观模式


    简介:为子系统中的一组接口提供一个统一的高层接口

    目的:

    总结:整合一组接口成一个接口

    组成:被整合接口, 统一接口

    1,被整合接口

    package com.design.k.facade;
    /**
     * 子服务A
     */
    public interface SubAService {
    
        void methodA();
    }
    package com.design.k.facade;
    /**
     * 子服务A
     */
    public class SubAServiceImpl implements SubAService {
    
        @Override
        public void methodA() {
            System.out.println("子服务A - 方法A  ... ...  ");
        }
    
    }
    package com.design.k.facade;
    /**
     * 子服务B
     */
    public interface SubBService {
    
        void methodB();
    }
    package com.design.k.facade;
    /**
     * 子服务B
     */
    public class SubBServiceImpl implements SubBService {
    
        @Override
        public void methodB() {
            System.out.println("子服务B - 方法B  ... ...  ");
        }
    
    }
    package com.design.k.facade;
    /**
     * 子服务C
     */
    public interface SubCService {
    
        void methodC();
    }
    package com.design.k.facade;
    /**
     * 子服务C
     */
    public class SubCServiceImpl implements SubCService{
    
        @Override
        public void methodC() {
            System.out.println("子服务C - 方法C  ... ...  ");
        }
    
    }

    2,统一接口

    package com.design.k.facade;
    /**
     * 外观模式
     */
    public interface FacadeService {
    
        /**
         * 外观模式
         * 
         * 将子服务进行任意组合通过外观模式提供统一的接口
         */
        void methodAB();
        void methodBC();
        void methodABC();
    }

    3,统一接口实现

    package com.design.k.facade;
    
    public class FacadeServiceImpl implements FacadeService {
        
        //初始化子服务
        private SubAService subAService;
        private SubBService subBService;
        private SubCService subCService;
    
        public FacadeServiceImpl() {
            super();
            this.subAService = new SubAServiceImpl();
            this.subBService = new SubBServiceImpl();
            this.subCService = new SubCServiceImpl();
        }
        public FacadeServiceImpl(SubAService subAService, SubBService subBService, SubCService subCService) {
            super();
            this.subAService = subAService;
            this.subBService = subBService;
            this.subCService = subCService;
        }
    
        @Override
        public void methodAB() {
            subAService.methodA();
            subBService.methodB();
        }
    
        @Override
        public void methodBC() {
            subBService.methodB();
            subCService.methodC();
        }
    
        @Override
        public void methodABC() {
            subAService.methodA();
            subBService.methodB();
            subCService.methodC();
        }
    
    }

    4,Main

    package com.design.k.facade;
    /**
     * 11-外观模式
     * 
     * 将多个服务做统一入口处理
     */
    public class MainTest {
    
        public static void main(String[] args) {
            
            /**
             * 外观模式 - 就是将子服务整合为统一入口
             */
            FacadeService facadeService = new FacadeServiceImpl();
            facadeService.methodAB();
            facadeService.methodBC();
            facadeService.methodABC();
        }
    }

    5,Result

    --------原始方法----开始-------------------
    用户服务接口:  用户信息修改  。。。 。。。userId=1001
    --------装饰器A----开始-------------------
    装饰器A - 针对用户修改方法 - 添加的包装   - starting ... ... 
    用户服务接口:  用户信息修改  。。。 。。。userId=1001
    装饰器A - 针对用户修改方法 - 添加的包装   - end ... ... 
    装饰器A - 针对用户服务 - 装饰的扩展方法   ... ... 
    
    --------装饰器B----开始-------------------
    装饰器B - 针对用户修改方法 - 添加的包装   - starting ... ... 
    用户服务接口:  用户信息修改  。。。 。。。userId=1001
    装饰器B - 针对用户修改方法 - 添加的包装   - end ... ... 
    装饰器B - 针对用户服务 - 装饰的扩展方法   ... ... 
    
    --------装饰器A && 装饰器B----开始-------------------
    装饰器B - 针对用户修改方法 - 添加的包装   - starting ... ... 
    装饰器A - 针对用户修改方法 - 添加的包装   - starting ... ... 
    用户服务接口:  用户信息修改  。。。 。。。userId=1001
    装饰器A - 针对用户修改方法 - 添加的包装   - end ... ... 
    装饰器B - 针对用户修改方法 - 添加的包装   - end ... ... 
    装饰器B - 针对用户服务 - 装饰的扩展方法   ... ... 
  • 相关阅读:
    C#中正则表达式的分组构造
    CompressionModule压缩模块
    BS程序代码与安全与基本攻击/防御模式
    mssql 性能优化的一些认识
    sql语句基础
    利用.net2.0中的GZip或Deflate压缩文件
    一个完整的ID生成器,并极大地降低了并发重复的概率,转换成十六进制 时间戳
    IE中的条件注释表
    DevExpress的10个使用技巧
    几种检查调试CSS布局的有效方法
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/7221705.html
Copyright © 2020-2023  润新知