設計模式----代理模式通俗實例

代理和被代理實現同一個接口

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();
    }
}

 

測試結果

 


 

附:ide

Spring裏代理模式,Spring AOP 利用了 AspectJ AOP實現的! AspectJ AOP 的底層用了動態代理
動態代理有兩種
目標方法有接口時候自動選用 JDK 動態代理
目標方法沒有接口時候選擇 CGLib 動態代理測試

相關文章
相關標籤/搜索