静态代理模式
package lambdal;
/*
* 真实对象和代理对象都实现同一个接口
* 代理对象要代理真实角色的事情,所以要声明一个接口
* 通过接口调用真实对象需要做的事情,还可以做其它事情
* 实例化时只需要将真实对象传入代理对象即可
* 代理对象可以完成真实对象无法做的事,真实对象只做自己的事
* */
public class StaticProxy {
public static void main(String[] args) {
You you = new You(); //真实对象实例化
WddingCompany wddingCompany = new WddingCompany(you);
wddingCompany.HappyMarry();
}
}
interface Marry{
void HappyMarry();
}
//真实角色,你
class You implements Marry{
@Override
public void HappyMarry() {
System.out.println("结婚");
}
}
//代理角色,婚庆公司
class WddingCompany implements Marry{
//代理做的事情
private Marry target;
//代理婚礼事宜
public WddingCompany(Marry target) {
this.target = target;
}
@Override
public void HappyMarry() {
//结婚之前,代理对象做的事情
before();
//结婚时,我做的事情(真实对象)
this.target.HappyMarry();
//结婚之后,代理对象做的事情
after();
}
//婚礼之前
private void before() {
System.out.println("布置现场");
}
//婚礼之后
private void after() {
System.out.println("收尾款");
}
}
- 多线程中Thread类,Runnable接口,start()方法 也可以以此类比。