Java中的静态代理是代理模式中的一种,通过静态代理可在不修改目标对象的情况下来扩展目标对象的功能。
静态代理需要两种角色,并且这两种角色要实现相同的接口
interface Marry{
void HappyMarry();
}
一个人要结婚,那么他是结婚的主角,实现结婚则需要婚庆公司来协助,提供结婚前和结婚后的相应事宜。那么这个人就是目标对象,而婚庆公司则是代理对象。
那么目标对象需要结婚,则需要实现Marry接口,那么这个时候目标对象即可进行结婚。
class Person implements Marry{
@Override
public void HappyMarry() {
PRT.prtln("真实角色");
}
}
public class StaticProxy {
public static void main(String[] args) {
Person person = new Person();
person.HappyMarry();
}
}
一个人的精力是有限的,于是我们需要婚庆公司的参与来对结婚进行扩充,但是要结婚的目标对象不变,要做的事情也不变,那么代理对象则需要实现相同的接口
class WeddingCommpany implements Marry{
private Marry target;
public WeddingCommpany(Marry target) {
this.target = target;
}
@Override
public void HappyMarry() {
before();
target.HappyMarry();
after();
}
private void before(){
PRT.prtln("静态代理结婚前");
}
private void after(){
PRT.prtln("静态代理结婚后");
}
这个时候,结婚则不需要目标对象直接执行,而是由代理对象进行代理执行
public class StaticProxy {
public static void main(String[] args) {
WeddingCommpany weddingCommpany = new WeddingCommpany(new Person());
weddingCommpany.HappyMarry();
}
}
这样,目标对象就可以专注做自己的任务,其余的事情交给静态代理来做。