代理:通俗的来讲就是A要做一件事情,让B代替他来做相关的事情,但是主角还是A。
Java中静态代理的三要素:
1. 接口(规范)
2. 主角类:实现接口
3. 代理类:实现接口
干货:
首先是接口:相当于业务主体,今天的干货以杀人为主体
public interface IKill {
public abstract void killSomeone(String targetName);
}
其次是主角登场:今天的主角是一名职业杀手
public class Killer implements IKill {
@Override
public void killSomeone(String targetName) {
// TODO Auto-generated method stub
System.out.println("I am a killer. I've killed "+targetName);
}
}
最后是我们的杀手中介(也就是代理)
public class KillerAgent implements IKill {
private IKill kill;
public KillerAgent(IKill kill){
this.kill = kill;
}
void findTarget(){
System.out.println("agent:寻找击杀对象");
}
@Override
public void killSomeone(String targetName) {
findTarget();
this.kill.killSomeone(targetName);
escape();
}
void escape(){
System.out.println("agent:分钱,帮助杀手逃跑");
}
}
主题接口代码很简单,就是个普通的接口。
主角类也不复杂,就是针对主体做自己该做的事情。
代理类相对复杂点,虽然实现了主题接口,但是它没有做核心的事情,只是帮助了主角更好的完成事情。
测试代码:
public static void main(String[] args) {
IKill kill = new Killer();
KillerAgent ka = new KillerAgent(kill);
ka.killSomeone("Jim");
}