用在水浒传中潘金莲通过王婆这个代理者来勾引西门庆来达到自己的目的为例子来说明
真实对象通过代理模式中的代理者来控制其他对象达到自己的目的,但是其他对象对真实对象是不可见的,好像就看不到真实对象,真实对象不存在一样。
---------------------------------------------------------------------------------------------------
/**
* 一类女人
* @author Administrator
*
*/
public interface KindWoman {
//抛媚眼
public void makeEyesWithMan();
//与男人happy
public void happyWithMan();
}
---------------------------------------------
/**
* 具体的这个女人,这里就是真实对象潘金莲
* 她想要和西门庆happy,但是又碍于面子,就需要王婆这个中间角色,作为代理者,来代理自己的职务
*
* 所以代理者和被代理者需要实现同一个接口,这样代理者才能代理真实对象的职能
* @author Administrator
*
*/
public class PanJinLian implements KindWoman {
@Override
public void makeEyesWithMan() {
System.out.println(this.getClass().getName()+"在抛媚眼");
}
@Override
public void happyWithMan() {
System.out.println(this.getClass().getName()+"在和男人happy");
}
//除了代理这可以帮我们做的事之外,我们还可以自己定义唯有自己能做到事
public void doOtherThing(){
}
}
-----------------------------------------------------------------------
/**
* 具体的这个女人,这里就是真实对象贾氏
* @author Administrator
*
*/
public class JiaShi implements KindWoman{
@Override
public void makeEyesWithMan() {
System.out.println(this.getClass().getName()+"在抛媚眼");
}
@Override
public void happyWithMan() {
System.out.println(this.getClass().getName()+"在和男人happy");
}
}
--------------------------------------------------------------------------------------------------------
/**
* 王婆作为代理者
* @author Administrator
*
*/
public class WangPo implements KindWoman{
//抽象的真实对象woman
private KindWoman woman;
//默认为潘金莲代言
public WangPo() {
super();
this.woman = new PanJinLian();
}
//具体的真实对象woman,为这里的woman代言,这里可以更换代言,为其他女人代言
public WangPo(KindWoman woman) {
super();
this.woman = woman;
}
/*这里表面上是王婆在执行,实际上因为王婆是代理者,这里王婆持有真实对象的引用。所以实际上爽的是
* 潘金莲这类女人
*/
@Override
public void makeEyesWithMan() {
this.woman.makeEyesWithMan();
}
@Override
public void happyWithMan() {
this.woman.happyWithMan();
}
}
----------------------------------------------------
public class XiMenQing {
/**
* 测试
*/
public static void main(String[] args) {
WangPo wangPo = new WangPo();
//这里其实是王婆代言的潘金莲在爽
wangPo.makeEyesWithMan();
wangPo.happyWithMan();
wangPo = new WangPo(new JiaShi());
wangPo.makeEyesWithMan();
wangPo.happyWithMan();
}
}