zoukankan      html  css  js  c++  java
  • 静态代理设计模式(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 }
    运行结果:
      准备工作
      真实角色的功能
      收尾工作

      

  • 相关阅读:
    linux 系统运维工具13款
    Django2.0 分页的应用
    jvm优化
    SSH-key 在Windows下如何生成公钥和私钥
    申请Let’s Encrypt免费证书,给自己网站增加https访问
    wordpress上传主题以及安装插件 出现ftp的问题解决方案
    php压缩文件
    linux下 如何切换到root用户
    TP3.2.3框架隐藏Home模块以及index.php入口文件的方法
    PHP打开错误提示和关闭错误提示的方法
  • 原文地址:https://www.cnblogs.com/yxiaooutlook/p/7798563.html
Copyright © 2011-2022 走看看