代理模式

用在水浒传中潘金莲通过王婆这个代理者来勾引西门庆来达到自己的目的为例子来说明

真实对象通过代理模式中的代理者来控制其他对象达到自己的目的,但是其他对象对真实对象是不可见的,好像就看不到真实对象,真实对象不存在一样。

---------------------------------------------------------------------------------------------------

/**
 * 一类女人
 * @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();
 }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值