静态代理:
- 真实方法和代理方法的名字和参数等相同,方法体不同即可,
- 代理类与被代理类通过实现一个相同的接口来建立起联系
- 代理对象(WeddingCompany 的对象)要代理真实对象(You 的对象)
静态代理优点:
- 代理对象可以做很多真实对象做不了的事情
- 真实对象专注做自己的事情
package creatthread;
public class StaticProxy {
public static void main(String[] args) {
System.out.println("静态代理演示:");
You person = new You();
//往WeddingCompany的构造器中扔一个实现了Marry的对象
WeddingCompany wc = new WeddingCompany(person);
wc.happyMarry();
System.out.println();
System.out.println("线程中静态代理的体现:");
//往Thread的构造器中扔一个实现了Runnable接口的对象
Thread thread = new Thread(() -> System.out.println("you get married."));
thread.start();
}
}
//公共接口
interface Marry {
void happyMarry();
}
//被代理类
class You implements Marry {
@Override
public void happyMarry() {
System.out.println("you get married.");
}
}
//代理类
class WeddingCompany implements Marry {
//真实对象
private Marry person;
public WeddingCompany(Marry person) {
this.person = person;
}
//需要被代理类自己完成的功能,在方法内部用被代理类的对象调用方法
@Override
public void happyMarry() {
beforeMarry();
person.happyMarry();
afterMarry();
}
private void beforeMarry() {
System.out.println("布置会场");
}
private void afterMarry() {
System.out.println("撤掉会场布置");
}
}
结果: