持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天
静态代理
代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。
代理模式角色:
- 抽象角色(Subject):通过接口或抽象类声明真实主题和代理对象实现的业务方法。
- 真实角色(Real Subject):实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
- 代理(Proxy):提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
- 客户 : 使用代理角色来进行一些操作 。
我们今天聊聊静态代理
静态代理这种代理方式需要代理对象和目标对象实现一样的接口。
优点:可以在不修改目标对象的前提下扩展目标对象的功能。
缺点:
- 冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。
- 不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。
举例 结婚案例
实现: 结婚案例
/**
* 静态代理:结婚案例
*/
public class Demo7_StaticProxy {
public static void main(String[] args) {
WeddingCompany weddingCompany = new WeddingCompany(new You());
weddingCompany.happyMarry();
}
}
//结婚
interface Marry {
void happyMarry();
}
//真实角色:你去结婚
class You implements Marry {
@Override
public void happyMarry() {
System.out.println("doris要结婚了,超开心");
}
}
//代理角色:帮助你结婚
class WeddingCompany implements Marry {
private Marry target;//代理-->真实目标角色角色,帮谁结婚
public WeddingCompany(Marry target) {
this.target = target;
}
@Override
public void happyMarry() {
after();
this.target.happyMarry();
before();
}
private void after() {
System.out.println("结婚之前,布置现场");
}
private void before() {
System.out.println("结婚之后,收尾款");
}
}
优化:使用线程,Lamda表达式
静态代理好处
代理对象可以做很多真实对象做不了的事情 真实对象专注做自己的事
总结
真实对象和代理对象都要实现一个接口 代理对象要代理真实角色