# Java笔记(12) 静态代理

打印 上一主题 下一主题

主题 868|帖子 868|积分 2604

静态代理可以在不改变原有代码的情况下,增加新的功能和操作,对原有对象进行扩展。
静态代理要求真实对象和代理对象都实现同一个接口,由代理对象代理真实角色的接口实现,并在实现前后增加新的操作。
  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类代理执行待执行线程。
静态代理可以做很多真实对象做不了的事情,而真实对象可以专注做自己的事情。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表