这期的主人公是安妮,在中路紧张的对线提莫中,好不容易到6级了,可以一套秒人了,安妮召唤出了她的熊提伯斯。然而提伯斯脑袋空空,只会一个劲的追着人拍,就需要安妮代理来控制

首先构建一个接口,其实不是必要的,但是毕竟annie和Tibbers都实现了“攻击”这个功能,为了代码的规范和可读性,还是写上。并且在其他场景下可能会是必要的。

public interface NormalAttack{void makeAttack();
}

然后我们是Tibbers类。Tibbers只需要傻傻的拍人就可以了,剩下的逻辑交给Annie做。

class Tibbers implements NormalAttack{private int _blood = 100;@Overridepublic void makeAttack() {System.out.println("Tibbers造成伤害20点");}public int getBlood(){return this._blood;}public void setBlood(int blood){this._blood = blood;}
}

然后是Annie类,里面在构建函数中维护了一个Tibbers的实例,代理操作着Tibbers。

class Annie implements NormalAttack{Tibbers tibbers; Annie() {Tibbers tibbers = new Tibbers();this.tibbers = tibbers;}@Overridepublic void makeAttack() {      if(this.tibbers.getBlood() >= 30){System.out.println("tibbers去打那个提莫!");this.tibbers.makeAttack();}else{System.out.println("tibbers快回来,你还是挺值钱的!");}}}

最后就是main函数了,实例出Annie就可以了,这里模拟了每回合扣

class Main{public static void main(String[] args) {Annie annie = new Annie();int bloodOfTibbers = annie.tibbers.getBlood();while(bloodOfTibbers>0){annie.makeAttack();bloodOfTibbers-=20;annie.tibbers.setBlood(bloodOfTibbers);}System.out.println("Tibbers还是死了。");}
}

最后结果:

tibbers去打那个提莫!
Tibbers造成伤害20点
tibbers去打那个提莫!
Tibbers造成伤害20点
tibbers去打那个提莫!
Tibbers造成伤害20点
tibbers去打那个提莫!
Tibbers造成伤害20点
tibbers快回来,你还是挺值钱的!
Tibbers还是死了。

代理模式其实就是各司其职,Tibbers只负责拍人,不关心什么时候打,打谁,什么时候跑。这些事情交给它的代理类Annie类来负责,Annie也不关心Tibbers是拍人还是锤人,只知道它是在造成伤害即可。
在最外部的调用中,没有Tibbers的实例,就隐藏了这个实例。最外部的调用也只需要操作Annie类就好。
和装饰模式不一样,装饰模式关注在一个对象上动态添加方法;但是代理模式则更加关注控制对对象的访问,即会隐藏对象的具体信息。

【设计模式】用英雄联盟来解释代理模式相关推荐

  1. 《英雄联盟》——召唤师峡谷模式 游戏设计元素分析

    <英雄联盟>--召唤师峡谷模式 游戏设计元素分析: 前言 玩家 游戏目标 规则与行动 挑战 成功的因素 前言 本文只针对<英雄联盟>这款游戏中的其中一个模式<召唤师峡谷& ...

  2. 对设计模式的总结之装饰模式与代理模式

    前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓 ...

  3. java设计模式之为别人做嫁衣----代理模式

    2019独角兽企业重金招聘Python工程师标准>>> 7.1为别人做嫁衣 "小菜,今天见这个叫娇娇的美女见得如何呀?"大鸟一回家来就问小菜. "唉,别 ...

  4. 设计模式C++实现(8)——代理模式

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

  5. 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式

    1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...

  6. 【设计模式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)

    本文出自   http://blog.csdn.net/shuangde800 在上篇中,我们学习了代理模式,并用Java RMI实现了一个最简单的远程代理. 实际上代理模式并不仅仅应用与远程代理,还 ...

  7. 设计模式学习笔记(9)——代理模式

    为什么80%的码农都做不了架构师?>>>    定义:代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用. 作用:为其他对象提供一种代理以控制对这个对象的访问. 类图 ...

  8. 【设计模式】为别人做嫁衣 --- 代理模式

    一,概述 定义:代理模式(Proxy)为另一个对象提供一个替身或占位符以控制对这个对象的访问,简而言之就是用一个对象来代表另一个对象. 作用:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下 ...

  9. 步步为营 .NET 设计模式学习笔记 七、Proxy(代理模式)

    概述 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来 ...

最新文章

  1. centos安装tensorFlow的java环境
  2. 敏捷研发落地之持续集成
  3. PIE SDK图层树伙伴控件示例
  4. JetBrains 第二轮:再为免费全家桶续命三个月
  5. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
  6. 活用内核链表解决约瑟夫斯问题
  7. launch mysql_Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件
  8. Linux从零开始(二、基础命令)
  9. 深和jsonp【转】 jsonpk跨域问题详解
  10. virtualenv创建独立的Python环境
  11. jQuery(二)事件
  12. c语言按位取反 补码,按位取反运算符,数值取反之后是反码,还是补码- -
  13. AI人工智能毕业设计课题:车牌识别,车牌识别系统,车辆识别系统
  14. python爬楼梯递归_爬楼梯(Python3)
  15. 语音社交聊天室源码开发,如何实现左滑删除功能
  16. 2018-2019的裁员风波(程序员要有危机意识,程序员堪比娱乐圈,更新换代快)
  17. icinga-cn-1.11.1启动ido2db报错Starting Ido2db
  18. 卸载360天擎-奇安信
  19. 风车IM即时通讯聊天系统源码_聊天APP_附APP_带安装教程
  20. 国内可用的时间服务器

热门文章

  1. x64 ASM 常用汇编指令
  2. 怎样为程序员做职业规划
  3. Scrapy爬虫之中文乱码问题
  4. 五年级计算机课教什么东西,五年级信息技术下教案
  5. 如何正确计算LINUX内存使用率
  6. 计算机输入法在桌面显示不出来怎么办,电脑桌面上的输入法切换键没有了怎么办...
  7. 英语发音规则---I字母常见发音组合有哪些
  8. 亚马逊Amazon SP-API注册申请和授权对接开发和亚马逊SP-API开发人员注册资料的注意事项,PII申请的事项
  9. 支付宝人脸认证(安卓)
  10. lumen 项目根目录_Lumen简单使用