代理指的是帮助真正的角色进行一些事情的处理,从而使真正的角色只需要专注于做自己的事情即可。举个例子,拿结婚这件事情来说,新郎就是真实的角色,而婚庆公司就是一个代理的角色,帮你忙前忙后,而你只需要拜天地,洞房就可以了。
静态代理的编程思路
1.需要一个接口,该接口规定了真实对象需要做的事情。
2.新建真实角色的类(新郎),实现上面的接口,重写接口中定义的方法。
3.新建代理类(婚庆公司),实现上面的接口,还需要定义需要为真实角色做的事情(为结婚服务的其他方法),需要一个目标对象(新郎)一般通过构造的方式将目标对象传进来,在重写的接口中的方法中调用目标对象重写的方法。
接下来我们看一下代码的实现:
共同的接口 IMarry:接口中只是定义了一个新婚快乐的方法
package cn.com.dh;
public interface IMarry {
void happyMarry();
}
真实对象: 实现接口,重写方法。
package cn.com.dh;
public class Man implements IMarry{
@Override
public void happyMarry() {
System.out.println("我们结婚了!");
}
}
代理对象:实现共同的接口,定义一个目标对象,通过构造方法的方式传进来,定义了两个普通方法,结婚前的准备事情,结完婚闹洞房的事情(好像不太合理,哈哈 ,婚庆公司应该没有这项义务,就这样吧。。。),最后就是重写父接口中的happyMarry()方法,方法体中调用redy()方法,目标对象的happyMarry()方法,以及after()方法。
package cn.com.dh;
public class MarryCompany implements IMarry {
private IMarry target;
public MarryCompany(IMarry target){
this.target = target;
}
@Override
public void happyMarry() {
ready();
this.target.happyMarry();
after();
}
private void ready(){
System.out.println("婚庆公司为结婚之前的准备工作。。。");
}
private void after(){
System.out.println("闹洞房。。。");
}
}
OK 就这些,静态代理现在看起来其实也没有特别难,不知道自己为什么当时始终理解不了。
下面我们来写一个测试类测试一下:
package cn.com.dh;
public class StaticProxy {
public static void main(String[] args) {
new MarryCompany(new Man()).happyMarry();
}
}
控制台输出:
婚庆公司为结婚之前的准备工作。。。
我们结婚了!
闹洞房。。。
Process finished with exit code 0
好啦,希望喜欢的朋友多多点赞,提出意见,让我们共同进步。