zoukankan      html  css  js  c++  java
  • 代理模式

    前言

    小龙同学花费毕生绝学精心学习并制作了自动化测试之selenium ,但预定分享时间时,小龙龙同学胆怯了,于是大哥小强出马,帮他完成预定分享时间的工作

    代理模式

    为其他对象(小龙)提供一个代理(小强)以控制对这个对象的访问. 类图如下:

    类图

    优点:

    1. 职责清晰。
    2. 高扩展性。
    3. 智能化。

    缺点:

    1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
    2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

    使用场景:按职责来划分,通常有以下使用场景:

    1. 远程代理。
    2. 虚拟代理。
    3. Copy-on-Write 代理。
    4. 保护(Protect or Access)代理。
    5. Cache代理。
    6. 防火墙(Firewall)代理。
    7. 同步化(Synchronization)代理。
    8. 智能引用(Smart Reference)代理。

    预定分享时间的职能

    package com.jack.idea.test.designmode;
    
    /**
     * 代理模式
     *
     * @author ljs.song
     * @date 2017-12-28 18:50
     */
    public class Proxy {
    
        public static void main(String[] args) {
            ////接下来小强代理小龙去跟磊磊等抢分享时间
            Xiaoqiang xiaoqiang = new Xiaoqiang(new Xiaolong());
            //磊磊说4点他要分享
            xiaoqiang.reserveTime(4);
    
            System.out.println("----------------");
            //磊磊被上述大哥打败,改成说他要5点分享
            xiaoqiang.reserveTime(5);
        }
    }
    
    //分享者
    interface Sharer{
    
        /**
         * 预定时间 大家都来报出一些时间抢
         */
        void reserveTime(int time);
    }
    
    /**
     * 小龙内心知道自己想周四分享,但是怕有别人抢时间,不敢开口
     */
    class Xiaolong implements Sharer{
    
        @Override
        public void reserveTime(int time) {
            System.out.println( "我想周四 "+time+" 点开始分享");
        }
    }
    
    /**
     * 老大哥小强出马帮其抵挡一切入侵者
     */
    class Xiaoqiang implements Sharer{
    
        private Sharer sharer;
    
        public Xiaoqiang(Sharer sharer) {
            this.sharer = sharer;
        }
    
        @Override
        public void reserveTime(int time) {
            //这里表示这个代理能帮他全权做出一些反馈,不仅仅是调用被代理者的职能
            if(time == 4){
                System.out.println("我不管,只能小龙在这个点分享");
            }else{
                this.sharer.reserveTime(time);
            }
        }
    }
    

    转载请注明出处 https://blog.csdn.net/abudexiatian

  • 相关阅读:
    bean的注入方式
    Spring中的IOC
    BeanFactory和ApplicationContext的区别
    mysql出现锁表 com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    centos防火墙
    sql中union和union all的区别
    Sql语句中IN和exists的区别及应用
    ROLLUP,CUBE,GROUPPING详解
    通过WinRM在本机执行云服务器脚本,更新git代码
    Sqlserver2012评估期已过问题解决
  • 原文地址:https://www.cnblogs.com/jackslj/p/11496039.html
Copyright © 2011-2022 走看看