了解静态代理

首先需要的了解下代理,用一个生活中的例子来做类比—代购。客户原来是直接向厂家购买商品,但是有了代购商后,客户不再直接与厂家打交道,而是通过代购商来间接和厂家交流,这个代购商就是代理。如果用代码的逻辑思想去理解的话,可以想象原来客户类是直接调用委托类接口,而现在多了代理,多了个中间层,二者之间通过代理中间层交流,客户类不知道委托类具体的实现逻辑,而委托类也实现了与客户类之间的解耦,委托类可以在客户类需要的情况下,不修改自己的代码,完成一些额外的逻辑处理。

代理分为静态代理与动态代理,这里先了解下静态代理

以下是静态代理的demo代码:

public class StaticProxyDemo {
    static interface Iservice {
        void sayHello();
    }

    static class Service implements Iservice {
        @Override
        public void sayHello() {
            System.out.println("say hello~~~~~");
        }
    }

    static class StaticProxy implements Iservice {
        private Iservice service;

        public StaticProxy(Iservice service) {
            this.service = service;
        }

        @Override
        public void sayHello() {
            System.out.println("before--say hello");
            service.sayHello();
            System.out.println("after--say hello");
        }
    }

    public static void main(String[] args) {
        Service service=new Service();
        StaticProxy proxy = new StaticProxy(service);
        proxy.sayHello();
    }
}

运行结果:
在这里插入图片描述
从以上思路简析下静态代理的实现思路,首先需要有一个被代理的接口,该接口会有不同的实现类,然后创建出一个静态代理类,该类持有接口实例,然后具体调用的是接口的哪个实现类中的方法,由该静态代理类的构造函数的参数决定,所以静态代理类可以根据被代理类的不同实现类实例,来决定调用的是哪个实现类的方法逻辑,同时还能在调用时,为每个方法加入一些额外的处理逻辑。不过缺点也很明显,一个就是代码在写好时就是固定的,代理关系在编译期就固定了,所以一旦有较多的接口类需要用到代理,那么就会需要新建很多代理类,代码就显得很繁琐了。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/107622793