zoukankan      html  css  js  c++  java
  • 设计模式-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 - 针对用户服务 - 装饰的扩展方法   ... ... 
  • 相关阅读:
    Visual Studio 2005 Starter Kits
    怎样去做才是朋友?
    C#读写日志文本文件
    [文摘20080707]马云追加投资20亿 淘宝首定10年超沃尔玛目标
    [转]在WinForm应用程序中实现自动升级
    [转]官方Flash CS3简体中文帮助文档下载,AS3.0简体中文帮助文档下载
    [引]MySQL INNODB类型表的外键关联设置
    [转]winfrom让弹出的MessageBox在指定时间内自动销毁
    生活开心一笑 之 "我家半"与"QQ病毒"
    [English20080721]疯狂英语365句
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/7221705.html
Copyright © 2011-2022 走看看