http://yangguangfu.iteye.com/blog/815787---这个是很好的参考
关于代理的一个例子:开会--老板--秘书小明/开会--CEO--秘书小明,小明可以代替老板和CEO开会,小明就是那个代理
1.开会的职能接口(类名起的有问题):
/*
* 抽象对象--可以开会的人
*
*/
public interface MiShu {
public void kaiHui();//给秘书定义一个开会的方法
}
2.老板
和CEO的形象:
/*
* 老板开会
*
*/
public class TheBoos implements MiShu{
@Override
public void kaiHui() {
// TODO Auto-generated method stub
System.err.println("老板在亲自开会");
}
}
/*
* CEO
*/
public class TheCEO implements MiShu{
@Override
public void kaiHui() {
// TODO Auto-generated method stub
System.err.println("牛逼的CEO正在开会");
}
}
3.代理对象,小明出厂,其实也就是秘书对象,但是例子的名字起的有问题,例子中的秘书类应该叫可以开会的人:
/*
* 我们的小明同学就是其中一个可以开会的人
*
*/
public class XiaoMing implements MiShu{
private MiShu mishu;
public XiaoMing(MiShu mishu) {
//可以是CEO找小明代替开会也可以是老板
this.mishu = mishu;
}
public XiaoMing() {
//这个人默认表示老板
this.mishu = new TheBoos();
}
@Override
public void kaiHui() {
// TODO Auto-generated method stub
System.err.println("小明同志在代替老板开会");
mishu.kaiHui();
}
}
4.会议开始了,小明同学要开始装逼的了:
public class MyClient {
public static void main(String[] args) {
//CEO找到小明,要求小明代替开会
TheCEO ceo=new TheCEO();
XiaoMing xiaoming=new XiaoMing(ceo);
xiaoming.kaiHui();
//默认是小明代替老板开会
xiaoming=new XiaoMing();
xiaoming.kaiHui();
}
}
来吧,看下输出
小明同志在代替老板开会
牛逼的CEO正在开会
小明同志在代替老板开会
老板在亲自开会
很高兴,我们的小明同学装逼成功 了@!