静态代理设计模式(StaticProxy)

Posted 那么长的代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代理设计模式(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 }
运行结果:
  准备工作
  真实角色的功能
  收尾工作

 

 

 

  

以上是关于静态代理设计模式(StaticProxy)的主要内容,如果未能解决你的问题,请参考以下文章

java23中设计模式之代理模式

JAVA基础——代理模式

设计模式之静态代理模式

设计模式之代理模式 Proxy

设计模式——代理模式

设计模式-代理模式JAVA实现