package StaticProxy; /** * @author 庞靖超 * @version V1.0 * @Package StaticProxy * @description 静态代理模式 * @date 2021/8/24 15:42 */ // 静态代理模式总结: // 真实对象和代理对象都要实现同意接口 // 代理对象要代理真实角色 // 好处: // 代理对象可以做很多真实对象做不了的事情 // 真实对象就专注做自己的事情 public class StaticProxy { public static void main(String[] args) { //创建真实角色,可使用接口 Marry you = new You(); //创建代理角色,代理角色往往要添加新的方法,不建议使用接口创建 WeddingCompany company = new WeddingCompany(you); company.marry(); } } //接口 interface Marry { void marry(); } //真实角色 class You implements Marry { @Override public void marry() { System.out.println("我结婚了"); } } //代理角色,需要持有真实角色的引用 class WeddingCompany implements Marry { private Marry you; public WeddingCompany(Marry you) { this.you = you; } @Override public void marry() { before(); you.marry(); after(); } private void after() { System.out.println("结婚之后,收尾款"); } private void before() { System.out.println("结婚之前,布置婚礼现场"); } }
从上面的例子可以看到,实现静态代理模式时有三个要素
1.真实角色(委托对象)
2.代理角色
3.共同实现的接口
对比以实现Runnable接口的形式创建多线程,可以发现,代理角色Thread类不需要我们创建,我们只需要写委托对象实现Runnable接口.把委托对象的引用传递给Thread,借助Thread对象来开启线程即可