Java:静态代理
举例:
你:真实角色
婚庆公司:代理,帮你布置婚礼
代码演示:
package com.jiemyx.lambda;
public class StaticProxy {
public static void main(String[] args) {
You you = new You();
WeddingCompany weddingCompany = new WeddingCompany(you);
weddingCompany.happyMarry();
System.out.println("============");
//匿名类
new WeddingCompany(new You()).happyMarry();
}
}
interface Marry{
void happyMarry();
}
//真实角色,你要结婚了,把布置婚礼的事情交给婚庆公司去做
class You 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() {
this.target.happyMarry();
after();
}
private void after() {
System.out.println("婚礼后,跟客户收尾款");
}
}
//静态代理模式总结
//真实对象和代理对象都要实现同一个接口
//代理对象代理真实角色
//好处:
//代理对象可以做很多真实对象做不了的事情
//真实对象专注做自己的事情
运行结果:
布置婚礼
婚礼后,跟客户收尾款
============
布置婚礼
婚礼后,跟客户收尾款
静态代理与Thread对比
package com.jiemyx.lambda;
public class StaticProxy2 {
public static void main(String[] args) {
//匿名类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我爱你");
}
}).start();
//Lambdab表达式简化后
new Thread(()-> System.out.println("我爱你")).start();
//静态代理与Thread对比
//new Thread(()-> System.out.println("我爱你")).start();
//new WeddingCompany(new You()).happyMarry();
}
}
运行结果:
我爱你
我爱你