靜態代理設計模式(StaticProxy)


  靜態代理設計模式:

      要求:真實角色,代理角色;真實角色和代理角色要實現同一個接口,代理角色要持有真實角色的引用。

  在Java中線程的設計就使用了靜態代理設計模式,其中自定義線程類實現Runable接口,Thread類也實現了Runalbe接口,在創建子線程的時候,傳入了自定義線程類的引用,再通過調用start()方法,調用自定義線程對象的run()方法。實現了線程的並發執行。

 

 1 public class Test2 {  2 
 3     public static void main(String[] args) {  4         //Runnable實現類對象,真實角色
 5         Thread1 role1 = new Thread1();  6         //線程類代理角色,該類也實現了Runnable接口,代理角色
 7         Thread thread1 = new Thread(role1);//傳入了真實角色的引用
 8         
 9  thread1.start(); 10         
11  } 12 } 13 
14 class Thread1 implements Runnable { 15 
16  @Override 17     public void run() { 18         //TODO
19  } 20 
21 }

 

  Thread對象調用線程的start()方法,在內部調用了真實角色的run()方法。

設計靜態代理模式

  第一步,要有一個共同使用的接口

1 // 共同的接口
2 public interface Proxy { 3     public abstract void todo(); 4 }

  代理角色和真實角色共同實現該接口,代理角色實現需要的功能。

 1 // 真實角色
 2 class RealityRole implements Proxy {  3     
 4  @Override  5     public void todo() {  6         System.out.println("真實角色的功能");  7  }  8 }  9 
10 // 代理角色
11 class ProxyRole implements Proxy { 12     // 持有代理角色的引用
13     private Proxy realityRole; 14     
15     public ProxyRole() { 16         
17  } 18     
19     //傳入一個真實角色
20     public ProxyRole(Proxy role) { 21         realityRole = role; 22  } 23  @Override 24     public void todo() { 25         //在真實角色功能運行之前,代理角色做准備工作
26  doBefore(); 27         //執行真實角色的功能
28  realityRole.todo(); 29         //代理角色的收尾工作
30  doAfter(); 31  } 32     private void doBefore() { 33         System.out.println("准備工作"); 34  } 35     private void doAfter() { 36         System.out.println("收尾工作"); 37  } 38 }

  創建真實角色的對象和代理角色的對象,並將真實角色對象的引用傳給代理角色,讓代理角色去執行功能。

 
 1 public class Test {  2     public static void main(String[] args) {  3         //創建真實角色對象
 4         Proxy realityRole = new RealityRole();  5         //創建代理角色對象,並制定真實對象
 6         ProxyRole proxyRole = new ProxyRole(realityRole);  7         //代理角色工作,本質調用的還是真實角色的功能
 8  proxyRole.todo();  9  } 10 }
運行結果:
  准備工作
  真實角色的功能
  收尾工作

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM