静态代理
静态代理
你要去做一件事,可以把这件事交给别人去做,而且别人除了做这件事还会帮你顺手做别的事。就比如结婚,结婚包括婚礼准备、结婚本身、和打扫会场,你可以把这些事交给婚庆公司去做,婚庆公司就像静态代理,除了结婚,它还会帮你准备婚礼和打扫会场。
以下代码用结婚的例子模拟静态代理:
package com.cxf.multithread.stagent;
public class TestForStaticAgent {
public static void main(String[] args) {
Someone cxf = new Someone();
Agent agent = new Agent(cxf);
agent.doMarry();
}
}
interface Marry{
void doMarry();
}
class Someone implements Marry{
@Override
public void doMarry() {
System.out.println("get married");
}
}
class Agent implements Marry{
private Marry client;
public Agent(Marry client) {
this.client = client;
}
private void Prepare(){
System.out.println("prepare for the wedding");
}
private void Clean(){
System.out.println("clean the hall");
}
public void doMarry() {
Prepare();
this.client.doMarry();
Clean();
}
}
输出结果:
prepare for the wedding
get married
clean the hall
这段代码核心在于,agent执行doMarry时,会执行someone的doMarry和其他事情。agent和someone共同的父接口都有doMarry方法,两者分别重写了它。
Runnable接口也是这个道理。Thread和要做的事情类都继承了Runnable接口,Thread作为代理,执行start时,会执行要做的事情类的run方法和其他事情。