本人原博地址:http://blog.saymagic.cn/blog.php?id=17

三国杀案例:在五人局中,作为反贼的黄月英借黄忠的刀杀作为忠臣的夏侯惇,从这句话中我们可以总结出一个成语对不对,借刀杀人,没错,那这个成语是不是和设计模式有什么联系呢,当然,借刀杀人代表的就是设计模式中代理模式的典型代表。

  Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
代理模式涉及的角色:1:抽象主题角色.声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替.

2:代理主题角色.含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,使它可以随时代替真实主题.代理主题通过持有真实主题的引用,不但可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截,或在调用后进行某些操作.

3:真实代理对象.定义了代理角色所代表的具体对象.

说完了定义,我们来看一下上面所说的例子,黄月英可能因为距离等原因杀不到夏侯惇,所以,她可以通过借黄忠的刀来杀,这就完全符合代理模式,其中,黄忠代表代理主题角色,而黄月英代表真实代理对象,他们都会有杀人这个方法,让我们来看一下类图:

首先看一下Kill接口,它只定义了一个killing的方法。

package Proxy;/************************************************************************ Module:  Kill.java* Author:  magic5253* Purpose: Defines the Interface Kill***********************************************************************/import java.util.*;public interface Kill {void killing();}

接下来是具体主题类,它包含对夏侯惇的引用,因为是它要杀夏侯惇的吗,在实现killing方法中直接对夏侯惇做操作即可,看一下代码:

package Proxy;/************************************************************************ Module:  Huangyueying.java* Author:  saymagic* Purpose: Defines the Class Huangyueying***********************************************************************/import java.util.*;public class Huangyueying implements Kill {@Overridepublic void killing() {Xiahoudun xiahoudun = new Xiahoudun("夏侯惇 ");System.out.println(xiahoudun.getName()+"我要杀你!!!"); }}

接下来是代理主题类黄忠,它的killing方法中会调用黄月英的killing方法,并且代理类的主要用途在于,在调用具体主题的时候可以给它的前后添加方法,就像java中的动态代理就是这个道理。

package Proxy;/***********************************************************************
* Module:  Huangzhong.java* Author:  saymagic* Purpose: Defines the Class Huangzhong***********************************************************************/import java.util.*;public class Huangzhong implements Kill {public Huangyueying huangyueying = new Huangyueying();public void pre(){System.out.println("我是拿着麒麟弓的黄忠,射人又射马,中中中!!!!");}@Overridepublic void killing() {pre();huangyueying.killing();post();}public void post(){System.out.println("作为代理,做完一些事情后,也是有可能受到惩罚的!!!");}
}

当然,还有我们的小受夏侯惇。他是很简单的。

package Proxy;/************************************************************************Module:  Xiahoudun.java* Author:  magic5253* Purpose: Defines the Class Xiahoudun***********************************************************************/import java.util.*;public class Xiahoudun {String name;public Xiahoudun(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

最后呢,是客户端,它只需要生成代理类黄忠,调用黄忠的杀人方法,就可以完成帮助黄月英杀夏侯惇的作用,看下代码:

package Proxy;/************************************************************************ Module:  Client.java* Author:  saymagic* Purpose: Defines the Class Client***********************************************************************/import java.util.*;public class Client {public static void main(String []args){Kill killer = new Huangzhong();killer.killing();}}

好啦,大家有什么问题欢迎来下面留言。 源码。

三国杀与设计模式之代理模式(Proxy)相关推荐

  1. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...

  2. 设计模式之代理模式(Proxy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. 05、人人都会设计模式:代理模式--Proxy

    PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/1b3b6b003032 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...

  4. Java设计模式之代理模式(Proxy)

    参考http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...

  5. Java24种设计模式(第二种)--代理模式(Proxy Pattern)

    Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...

  6. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  7. 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣

    代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...

  8. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  9. js设计模式——代理模式proxy

    什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...

最新文章

  1. 解压文件出错解决方法(invalid compressed data--format violated)
  2. 新iPhone全面5G!4种杯型,最便宜只要5500,均内置中国北斗
  3. 网文作者:我太监了;GPT-3:我给你接上
  4. 杭州线下|2019产品经理年终轰趴
  5. C#系列三《C#数据类型与变量三》
  6. 8 旋转数组的最小数字
  7. 美团将建新上海总部 斥资65亿元拿下上海杨浦商办地块
  8. oracle报错查询动态视图,oracle基表和动态性能视图
  9. app集成极光推送笔记(angular js)
  10. 数百Windows XP系统文件一一诠释(转)
  11. linux高通内核移植工具十教程
  12. 会声会影编辑html,网页视频制作使用会声会影剪辑
  13. DoS攻击原理和防御方法
  14. rgb sw 线主板接口在哪_有颜值也有实力!利民TL-C12S幻彩RGB电脑散热风扇评测
  15. 【Python】字谜游戏
  16. cmos电路多余输入端能否悬空_CMOS和TTL集成门电路多余输入端的处理方法
  17. 中国蚁剑的下载以及安装教程
  18. ARGB 转换为十六进制值
  19. 真爱和迷恋的五大区别
  20. 干货!8套H5 App完整源码!果断收藏!

热门文章

  1. 你评论,我赠书~【TFS-CLUB社区 第9期赠书活动】〖HTML5+CSS3+JavaScript从入门到精通(微课精编版)(第2版)〗等你来拿
  2. python 编写一段自动下载微信群的聊天记录中的图片并保存到本地的代码
  3. 超详细Linux搭建Java开发环境
  4. ffmpeg-jpeg图片格式详解
  5. easyexcel 填写模板指定行合并单元格
  6. 55. 跳跃游戏 (两种解法)
  7. python replace方法_Python str replace()方法
  8. android 连接蓝牙键盘事件监听
  9. html设置一段文字颜色,用span css设置div内部分字体颜色
  10. 物联网产业体系介绍 全球物联网行业发展前景