• 代理模式---静态代理


    抽象主题(Subject)角色:这是一个抽象角色,通常被定义为接口,真实主题角色和代理主题角色都需实现此接口,

    以便将来可以使用代理主题对象来替代真实主题对象。

    public interface Static {
    
        String request();
    }
    
    
    真实主题(RealSubject)角色:也叫被代理角色,是代理主题角色所代表的真实对象,是业务逻辑的实际执行者。

    public class StaticImpl implements Static {
    
        public StaticImpl(){
    
        }
    
        @Override
        public String request() {
            return "请求进来....";
        }
    }
     
     代理主题(Proxy)角色:也叫代理角色,该角色内部含有对真实主题对象的引用,从而可以操作真实主题对象,
    
    
        同时代理对象提供与真实主题对象相同的接口以便在任何时刻都能代替真实主题对象。
    
    
        通常代理角色会在将客户端调用传递给真实主题对象之前或者之后执行某些操作,
    
    
        而不是单纯地将调用传递给真实主题对象。
    
    
    public class StaticProxy implements Static {
    
        private StaticImpl staticImpl = null;
        @Override
        public String request() {
    
            System.out.println("Before.....");
            //在真正需要的时候才能创建真实对象,创建过程可能很慢
            if(staticImpl == null){
                staticImpl = new StaticImpl();
            }//在多线程环境下,这里返回一个虚假类,类似于 Future 模式
            String result = staticImpl.request();
            System.out.println(result);
    
            System.out.println("After.....");
    
            return result;
        }
    }
    
    

    测试:
    public class Test {
        /**
         * 主题接口是Static,真实主题是StaticImpl 实现了Static接口,
         *
         * 代理类是StaticProxy,在代理类的方法里实现了StaticImpl类,并且在代码里写死了代理前后的操作
         *
         * 静态代理的优缺点:
         *
         * 优点:
         *
         * 使得真实主题处理的业务更加纯粹,不再去关注一些公共的事情,公共的业务由代理来完成,实现业务的分工,公共业务发生扩展时变得更加集中和方便。
         *
         * 缺点:
         *
         * 这种实现方式很直观也很简单,但其缺点是代理类必须提前写好,如果主题接口发生了变化,代理类的代码也要随着变化,有着高昂的维护成本。
         */
    
        public static void main(String[] args) {
    
            Static s = new StaticProxy();//使用代理
            s.request();//在真正使用时才创建真实对象
    
        }
    
    }
    
    
    









     
     














  • 相关阅读:
    zsh设置显示路径
    mysql性能优化
    php实现网络请求的方法及函数总结
    AI面试机器人后端架构实践
    Python脚本遍历文件夹,检查文件版本是否存在
    将 VS Code 终端设置为始终以管理员权限打开
    python20220623
    python20220625
    ss命令详解
    python20220624
  • 原文地址:https://www.cnblogs.com/lifan12589/p/14822267.html
Copyright © 2020-2023  润新知