真实对象和代理对象都有实现同一个接口
代理对象要代理真实角色
好处:
真实对象可以专注于自己的事情
代理对象可以做真实对象做不了或不必要做的事情
public class StaticProxy {
public static void main(String[] args) {
Person Zs = new Person();
//婚礼原本要张三执行,即Zs.HappyMarry();
//但实际上是是婚庆公司在执行,并且多做了before()和after()两个方法
WeddingCompany weddingCompany = new WeddingCompany(Zs);
weddingCompany.HappyMarry();
}
}
interface Marry{ //个人和公司都要实现的接口
void HappyMarry();
}
//真实角色,只有一个最核心的方法
class Person implements Marry{
@Override
public void HappyMarry() {
System.out.println( "张三要结婚了!!");
}
}
//代理角色,只是帮助结婚,除了最核心的方法,还有自己额外的方法
class WeddingCompany implements Marry{
private Marry target; //被代理的对象
public WeddingCompany(Marry target) { //有参构造
this.target = target;
}
@Override
public void HappyMarry() {
before();
this.target.HappyMarry();
after();
}
private void after() {
System.out.println("结婚之后,收尾款!");
}
private void before() {
System.out.println("结婚以前,布置现场!");
}
}