ToB企服应用市场:ToB评测及商务社交产业平台

标题: # Java笔记(12) 静态代理 [打印本页]

作者: 曂沅仴駦    时间: 2023-4-6 22:56
标题: # Java笔记(12) 静态代理
静态代理可以在不改变原有代码的情况下,增加新的功能和操作,对原有对象进行扩展。
静态代理要求真实对象和代理对象都实现同一个接口,由代理对象代理真实角色的接口实现,并在实现前后增加新的操作。
  1. public class StaticProxy{
  2.   public static void main(String[] args){
  3.     Person person = new Person("张三");
  4.     //由代理对象代理真实对象的方法
  5.     new WeddingCompany(person).happyMarry();
  6.   }
  7. }
  8. //要实现的接口
  9. interface Marry{ void happyMarry();}
  10. //真实对象
  11. class Person implements Marry{
  12.   private String name;
  13.   public Person(String name){this.name = name;}
  14.   public void happyMarry(){ //实现接口
  15.     System.out.println(this.name + " is gonna married, Happy!");
  16.   }
  17. }
  18. //代理对象
  19. class WeddingCompany implements Marry{
  20.   private Person person;
  21.   public void WeddingCompany(Person person){ this.person = person; }
  22.   public void happyMarry(){//实现接口的方法
  23.     before();  //代理过程中额外添加的操作
  24.     person.happyMarry();  //真实对象的操作
  25.     after();  //代理过程中额外添加的操作
  26.   }
  27.   public void before(){System.out.println("Before wedding, set up the scene...")}
  28.   public void after(){System.out.println("After wedding, clean up after...");}
  29. }
复制代码


在之前的笔记(11)中已经出现过静态代理了,创建多线程的方法中,提到的第一种方法是直接继承Thread类,第二种方法是实现Runnable接口,然后创建Thread类,将待执行线程作为参数传递进去,调用start()方法启动。
  1. public static void main(String[] args) {
  2.         TestThread testThread = new TestThread();//创建真实对象
  3.         new Thread(testThread).start();//由代理对象代理执行
  4.         for (int i = 0; i < 5; i++) {
  5.             System.out.println("main 方法线程: " + i);
  6.         }
  7.     }
复制代码
实际上这就是静态代理了,TestThread是真实对象,Thread是代理对象,二者都实现了Runnable接口,由Thread类代理执行待执行线程。
静态代理可以做很多真实对象做不了的事情,而真实对象可以专注做自己的事情。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4