代理模式
什么是代理模式?有别人找你做事,而你没空,所以找一个代理人帮你做。
举一个鲜明的例子: 西门庆, 王婆,潘金莲
西门庆 无法 直接 与 潘金莲 交往(用词委婉一点),所以找王婆做代理,而王婆与潘金莲同属于一种类型的人(即女人),这种人有个方法,一:抛媚眼(make eyes),二:做快乐事(happyAndMan)
// 女人接口
public interface WomenKind {
// 抛媚眼
void makeEyes();
// 做快乐的事
void happyAndMan();
}
// 潘金莲 不直接做事
public class PanJinLian implements WomenKind{
@Override
public void makeEyes() {
System.out.println("潘金莲 对西门庆抛媚眼");
}
@Override
public void happyAndMan() {
System.out.println("潘金莲 做快乐的事");
}
}
// 王婆 做代理
public class WangPo implements WomenKind{
private PanJinLian panJinLian;
public WangPo() {
panJinLian = new PanJinLian();
}
// 做代理,王婆 老了 ,不能做此事,所以只能做代理,实际做事的还是潘金莲
@Override
public void makeEyes() {
this.panJinLian.makeEyes();
}
@Override
public void happyAndMan() {
this.panJinLian.happyAndMan();
}
}
// 西门庆 上场
public class XiMenQing {
public static void main(String[] args) {
System.out.println("西门庆无意之中 看到潘金莲 ,不免情窦初开");
System.out.println("找到王婆,我婆 说 我来做代理");
WomenKind wangPo = new WangPo();
wangPo.makeEyes();
wangPo.happyAndMan();
}
}
水浒传中还有一个类似的例子: 卢俊义的老婆 贾氏 和 固管家
// 贾氏
public class JiaShi implements WomenKind{
@Override
public void makeEyes() {
System.out.println("贾氏 对西门庆 抛媚眼");
}
@Override
public void happyAndMan() {
System.out.println("贾氏 做快乐的事");
}
}
// 王婆
public class WangPo implements WomenKind{
private JiaShi jiaShi;
public WangPo() {
jiaShi = new JiaShi();
}
// 做代理,王婆 老了 ,不能做此事,所以只能做代理,实际做事的还是贾氏
@Override
public void makeEyes() {
this.jiaShi.makeEyes();
}
@Override
public void happyAndMan() {
this.jiaShi.happyAndMan();
}
}
// 西门庆
public class XiMenQing {
public static void main(String[] args) {
WomenKind wangPo = new WangPo();
wangPo.makeEyes();
wangPo.happyAndMan();
}
}
代理只用了多态,干活的是被代理类,代理类主要负责接活,具体找被代理类干,代理类如何知道被代理类要干甚呢?如何知根知底,定义接口。