对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧
一个人避免不了与中介打交道,比如租房,你很少会遇上房东,而是所谓的二房东,等等。。。更有甚者,假如我是某校的校长,我不方便收礼,我弄一个亲近的人做代理,有事都去找他吧。。。
今天就举一个刘备三顾茅庐的故事吧,当然我这边的故事又很大的差别。
刘备想要求才,首先他要去人才市场…
诸葛亮和刘备去找工作,却找不到,无奈之下去找阿三,让阿三做代理。
在人才市场找到阿三,于是阿三开始介绍诸葛亮与周瑜…
程序:
首先定义一个类型,跟诸葛亮同类型的存在,比如周瑜,司马懿,郭嘉。他们都是谋士,都会出谋划策。他们的代理都是阿山吧。
package com.yancy.proxy;
/**
* 谋士
*
* @author yancy
*
*/
public interface StrategicAdviser {
public void giveAdvice();
}
定义诸葛亮的类
package com.yancy.proxy;
/**
* 这是诸葛亮谋划
*
* @author yancy
*
*/
public class Zhugeliang implements StrategicAdviser {
public void giveAdvice() {
// TODO Auto-generated method stub
System.out.println("诸葛先生高卧隆中...");
}
}
定义周瑜的类
package com.yancy.proxy;
/**
* 周瑜的谋划
*
* @author yancy
*
*/
public class Zhouyu implements StrategicAdviser {
public void giveAdvice() {
// TODO Auto-generated method stub
System.out.println("周郎妙计安天下,赔了夫人又折兵");
}
}
阿三会做什么事情,我不管,我只需要知道周瑜和诸葛亮会做什么就可以了
package com.yancy.proxy;
/**
* 这是诸葛亮与周瑜可以做的事情,由阿三代为述说,提高身价
*
* @author yancy
*
*/
public class ASan implements StrategicAdviser {
private StrategicAdviser adviser;
/**
* 他可以是诸葛亮和周瑜的代理
*
* @param adviser
*/
public ASan(StrategicAdviser adviser) {
// TODO Auto-generated constructor stub
this.adviser = adviser;
}
public void giveAdvice() {
// TODO Auto-generated method stub
adviser.giveAdvice();
}
}
阿三开始向刘备推销诸葛亮和周瑜。
package com.yancy.proxy;
public class Liubei {
public static void main(String[] args) {
// 1. 阿三手上有周瑜,诸葛亮
Zhouyu yu = new Zhouyu();
Zhugeliang liang = new Zhugeliang();
// 2. 刘备想要人才,先去人才公司见阿三 阿三推荐周瑜 与诸葛亮
ASan sanYu = new ASan(yu);
ASan sanLiang = new ASan(liang);
// 3. 阿三述说诸葛亮与周瑜的技术
sanYu.giveAdvice();
sanLiang.giveAdvice();
}
输出结果
周郎妙计安天下,赔了夫人又折兵
诸葛先生高卧隆中...
至于刘备的选择,我们就不讨论了。
代理模式主要用到了Java三大特性中的多态,干活的主要是被代理类,代理的类起到的是中介的作用。