设计模式-代理模式

作为aop的实现技术支持,代理模式应该是最被人熟知的,代理模式用大白话来说,类似一个中介,可以进行方法的增强或者修改(Ps:我觉得静态代理模式和命令模式好像,命令模式也可以在具体命令类里调用接收者前后进行环绕增强,只不过无法修改方法只能进行拓展)

当我们不方便直接调用一个类的时候 可以使用代理模式,直接看代码吧

公共特征类

public interface Animal {
    void eat();
}

具体实现类

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("小狗要吃饭");
    }
}

代理类

public class DogProxy  implements Animal{
   Dog dog;

    @Override
    public void eat() {
       //执行之前的操作
        System.out.println("吃饭前的准备");
        dog.eat();
        //执行之后的操作
        System.out.println("吃饭后");
    }

    public DogProxy(Dog dog) {
        this.dog = dog;
    }

}

测试类

public class Client {
    public static void main(String[] args) {
        new DogProxy(new Dog()).eat();
    }
}

这种代理模式的缺点就是 每增加一个具体实现类 都要增加一个代理类,这种代理也叫静态代理,是一种在编译期就确定好的代理方式

还有另一种通过反射来进行代理的方式,叫动态代理。这两种代理方式都需要被代理类实现接口,代理类实现与代理类的统一接口以便修改方法。还有另一种技术字节码代理,常见的有cglib和asm。

代理类的核心就是创建代理类代理原类进行执行,因为实现了同一接口可以更方便的修改和增强。

不和别人一样,不复制只真正理解
原文地址:https://www.cnblogs.com/Vinlen/p/12784937.html