静态代理可以在不改变原有代码的情况下,增加新的功能和操作,对原有对象进行扩展。
静态代理要求真实对象和代理对象都实现同一个接口,由代理对象代理真实角色的接口实现,并在实现前后增加新的操作。- public class StaticProxy{
- public static void main(String[] args){
- Person person = new Person("张三");
- //由代理对象代理真实对象的方法
- new WeddingCompany(person).happyMarry();
- }
- }
- //要实现的接口
- interface Marry{ void happyMarry();}
- //真实对象
- class Person implements Marry{
- private String name;
- public Person(String name){this.name = name;}
- public void happyMarry(){ //实现接口
- System.out.println(this.name + " is gonna married, Happy!");
- }
- }
- //代理对象
- class WeddingCompany implements Marry{
- private Person person;
- public void WeddingCompany(Person person){ this.person = person; }
- public void happyMarry(){//实现接口的方法
- before(); //代理过程中额外添加的操作
- person.happyMarry(); //真实对象的操作
- after(); //代理过程中额外添加的操作
- }
- public void before(){System.out.println("Before wedding, set up the scene...")}
- public void after(){System.out.println("After wedding, clean up after...");}
- }
复制代码
在之前的笔记(11)中已经出现过静态代理了,创建多线程的方法中,提到的第一种方法是直接继承Thread类,第二种方法是实现Runnable接口,然后创建Thread类,将待执行线程作为参数传递进去,调用start()方法启动。- public static void main(String[] args) {
- TestThread testThread = new TestThread();//创建真实对象
- new Thread(testThread).start();//由代理对象代理执行
- for (int i = 0; i < 5; i++) {
- System.out.println("main 方法线程: " + i);
- }
- }
复制代码 实际上这就是静态代理了,TestThread是真实对象,Thread是代理对象,二者都实现了Runnable接口,由Thread类代理执行待执行线程。
静态代理可以做很多真实对象做不了的事情,而真实对象可以专注做自己的事情。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |