设计模式----代理模式通俗实例

代理和被代理实现同一个接口

package com.ij34.proxy;

public interface ProxyPattern {
  /*
    代理和被代理的共同点就是要实现同一个接口
    */
    public void eat();
    public void  sleep();
}

 

代理者女孩的母亲

package com.ij34.proxy;
   /*
    代理类
*/
public class GrilsMother  implements  ProxyPattern{

    private ProxyPattern pp;

    public  GrilsMother(ProxyPattern pp){
        this.pp=pp;
    }

    @Override
    public void eat() {
       pp.eat();
    }

    @Override
    public void sleep() {
       pp.sleep();
    }
}

 

被代理者女孩

package com.ij34.proxy;
 /*
   被代理类
*/
public class Gril implements ProxyPattern{
     @Override
     public void eat() {
         System.out.println("我是girl,我在eat");
     }

     @Override
     public void sleep() {
         System.out.println("我是girl,我在sleep");
     }
 }

 

测试

package com.ij34.proxy;

   /*
      测试代理,表面上写女孩女孩母亲吃饭睡觉,实际上写女孩吃饭睡觉
*/
public class ProxyTest {
    public static void main(String[] args) {
        GrilsMother dm = new GrilsMother(new Gril());
        dm.eat();
        dm.sleep();
    }
}

 

测试结果

设计模式----代理模式通俗实例_第1张图片

 


 

附:

Spring里代理模式,Spring AOP 利用了 AspectJ AOP实现的! AspectJ AOP 的底层用了动态代理
动态代理有两种
目标方法有接口时候自动选用 JDK 动态代理
目标方法没有接口时候选择 CGLib 动态代理

你可能感兴趣的:(设计模式----代理模式通俗实例)