Java24种设计模式 (第二种)


一、代理模式(Proxy Pattern)

模式逻辑:
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:

二、代码流程

先定义一种类型的女人:

代码如下(示例):

package com.cbf4life.proxy;
/**
* @author
* I'm glad to share my knowledge with you all.
* 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
*/
public interface KindWomen {
//这种类型的女人能做什么事情呢?
public void makeEyesWithMan(); //抛媚眼
public void happyWithMan(); //happy what? You know that!}

一种类型嘛,那肯定是接口,然后定义潘金莲:

代码如下(示例):

package com.cbf4life.proxy;
/**
* @author
* I'm glad to share my knowledge with you all.
* 定一个潘金莲是什么样的人
*/
public class PanJinLian implements KindWomen {
public void happyWithMan() { System.out.println("潘金莲在和男人做那个....."); }
public void makeEyesWithMan() { System.out.println("潘金莲抛媚眼"); }
}

再定一个丑陋的王婆:
代码如下(示例):

package com.cbf4life.proxy;
/**
* @author
* I'm glad to share my knowledge with you all.
* 王婆这个人老聪明了,她太老了,是个男人都看不上,
* 但是她有智慧有经验呀,她作为一类女人的代理!
*/
public class WangPo implements KindWomen {
private KindWomen kindWomen; public WangPo(){ //默认的话,是潘金莲的代理this.kindWomen = new PanJinLian(); } //她可以是KindWomen的任何一个女人的代理,只要你是这一类型
public WangPo(KindWomen kindWomen){ this.kindWomen = kindWomen; } public void happyWithMan() { this.kindWomen.happyWithMan(); //自己老了,干不了,可以让年轻的代替}
public void makeEyesWithMan() { this.kindWomen.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!}
}

两个女主角都上场了,男主角也该出现了:
代码如下(示例):

package com.cbf4life.proxy;
/**
* @author
* I'm glad to share my knowledge with you all.
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing { /** 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人* 收了不少好处费,那我们假设一下:* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!*/
public static void main(String[] args) { //把王婆叫出来WangPo wangPo = new WangPo(); //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲wangPo.happyWithMan(); }
}

那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个固管家苟合
的那个),这名字起的:“假使”,那我们也让王婆做她的代理:
把贾氏素描出来:

package com.cbf4life.proxy;
/**
* @author
* I'm glad to share my knowledge with you all.
*/
public class JiaShi implements KindWomen {
public void happyWithMan() { System.out.println("贾氏正在Happy中......"); }
public void makeEyesWithMan() { System.out.println("贾氏抛媚眼"); }
}

西门庆勾贾氏:

package com.cbf4life.proxy;
/**
* @author
* I'm glad to share my knowledge with you all.
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing { public static void main(String[] args) { //改编一下历史,贾氏被西门庆勾走:JiaShi jiaShi = new JiaShi(); WangPo wangPo = new WangPo(jiaShi); //让王婆作为贾氏的代理人wangPo.makeEyesWithMan(); wangPo.happyWithMan(); }
}

三、总结


说完这个故事,那额总结一下,代理模式主要使用了 Java 的多态,干活的是被代理类,代理类主要是 接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成, 大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。

Java24种设计模式(第二种)--代理模式(Proxy Pattern)相关推荐

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

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

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

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

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

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

  4. [设计模式-结构型]代理模式(Proxy)

    概括 名称 Proxy 结构 动机 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P ...

  5. 代理模式(Proxy Pattern)

    设计模式 - 吕震宇 .NET设计模式系列文章 薛敬明的专栏 乐在其中设计模式(C#) C#设计模式(13)-Proxy Pattern 一. 代理(Proxy)模式 代理(Proxy)模式给某一个对 ...

  6. 二十三种设计模式第二篇--工厂模式

    上篇我们了解了6条设计模式的准则,我相信如果你想了解设计模式,那么你迈出的第一步,我会将上一篇文档里边的6大准则进行一篇有关的代码展示,当然这是题外话了,本篇我们将重点围绕工厂模式进行讲解,天哪,23 ...

  7. 设计模式之略见一斑(代理模式Proxy)

    普通对象所需要完成的任务就是通过公共接口为外界提供自己所承诺的服务.然而,有时候合法的对象可能会因为各种原因而无法完成自己常规的任务.尤其是当对象需要长时候才能载入内存.对象正运行在另一台计算机上或者 ...

  8. 设计模式(结构型)之代理模式(Proxy Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  9. JAVA设计模式Design Pattern→单例模式Singleton Pattern、工厂模式Factory Pattern、代理模式Proxy Pattern

    私有化构造函数的类可以提供相应的 "接口"(一般就是静态方法)来返回自己的唯一实例供外部调用,像这样的确保只生成一个实例的模式被称作单例模式. 工厂模式,一个模型,用来大规模的生产 ...

最新文章

  1. 互联网协议 — Non-IP 网络架构
  2. 实验协作的时候需要做什么?
  3. Windows 7 提示AtBroke.exe初始化失败
  4. 用Autofac替换.net core 内置容器
  5. Unity3D Editor 扩展
  6. NYOJ题目839合并
  7. 阿里摩酷实验室CV实习生和社招
  8. 浅谈WebService开发二(同步与异步调用)转
  9. Linux常见问题解答--如何修复“tar:Exiting with failure status due to previous errors”
  10. 解决iPhone、iPad 或 iPod touch 无法连接Wi-Fi网络问题
  11. Django模板中加减乘除基本语法
  12. msdn我告诉你win10哪个是专业版
  13. Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)...
  14. PWA之 Service worker
  15. Eventloop事件循环机制
  16. java毕业设计陕菜食谱网站源码+lw文档+mybatis+系统+mysql数据库+调试
  17. 【问链财经-区块链基础知识系列】 第二十九课 区块链的世界:中国向左 美国向右
  18. 简述BP神经网络的流程,BP神经网络的实现包括
  19. bootstrap开源的后台管理系统模板
  20. 在线聊天室网站源码 自定义创建房间-无需数据库

热门文章

  1. Android跳转到应用商店的APP详情页面
  2. 抽象基类与接口,共性与个性的选择!(区别)
  3. 大数据电信客服项目一——数据生成
  4. 流量直升机-千牛插件功能列表
  5. 不能忍!花钱买网站VIP账号别人在用?
  6. 【KRpano360全景教程 】 - krpano地图导航radar插件的使用
  7. 为了软银的万亿物联网 ARM取消了一笔企业预授权费用
  8. 怎么用Java解二元方程_正则表达式解二元方程式代码
  9. 数据分析/大数据研发面经笔经(阿里/腾讯/网易/招行信用卡中心/小红书/vivo等)
  10. LeetCode42题动态规划 - 接雨水