对码当歌,猿生几何?

设计模式之代理模式之静态代理

首先,有个类

public class A  {
    public int add(int p) {
        return 100 + p;
    }
    public int sub(int p) {
        return 100 - p;
    }
}

给类A写一个代理类

public class B extends A  {
   private A a;    

   public B(A a){

      this.a=a;

   }

    public int add(int p) {

        return a.add(p);//这就实现了对a的代理,也可以添加其他逻辑
    }
    public int sub(int p) {
        return a.sub(p);//这就实现了对a的代理,也可以添加其他逻辑
    }
}

上面的代理类写完后。。客户只要把目标对象给代理类,然后对该目标对象创建一个代理对象。

客户操作代理对象,然后代理对象再操作目标对象。

具体代码

public void test(){

   A a=new A(); //首先创建目标对象

   B b=new B(a);//创建代理对象

   //调用代理对象方法

   b.add(10); //间接调用a的add,并且在调用a的add方法前后还添加了一些代码处理逻辑

    b.sub(20); //间接调用b的sub,并且在调用a的sub方法前后还添加了一些代码处理逻辑

//代理模式的用处就是在不更改原来的类的同事增加一些处理逻辑。。spring aop就是这样的原理

}

 

 

阅读更多