二 代理模式【Proxy Pattern】 来自CBF4LIFE 的设计模式
什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人:
package proxyPartern; /**
* @author lhb
* @类名 IWoman
* @描述 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
* @时间 2022/6/8 11:09
* @版本
**/
public interface IWoman {
//抛媚眼
public void makeEyessWithMan();
//和男人快乐
public void happyWithMan();
}
一种类型嘛,那肯定是接口,然后定义潘金莲:
package proxyPartern; /**
* @author lhb
* @类名 PanJinLian
* @描述 定一个潘金莲是什么样的人
* @时间 2022/6/8 11:13
* @版本
**/
public class PanJinLian implements IWoman{ @Override
public void makeEyessWithMan() {
System.out.println("pin jin lian can make eyes to man!");
} @Override
public void happyWithMan() {
System.out.println("pin jin lian happy with man!");
}
}
再定一个丑陋的王婆: 专门代理各种不安分的美眉
package proxyPartern; /**
* @author lhb
* @类名 WangPo
* @描述 王婆这个人老聪明了,她太老了,是个男人都看不上, 但是她有智慧有经验呀,她作为一类女人的代理!
* @时间 2022/6/8 11:15
* @版本
**/
public class WangPo implements IWoman{ private IWoman panJinLian; public WangPo(IWoman woman){
this.panJinLian = woman;
} @Override
public void makeEyessWithMan() {
//王婆这么大年龄了,谁看她抛媚眼?!
this.panJinLian.makeEyessWithMan();
} public IWoman getPanJinLian() {
return panJinLian;
} public void setPanJinLian(IWoman panJinLian) {
this.panJinLian = panJinLian;
} @Override
public void happyWithMan() {
//王婆这么大年纪了.干部了了.直接交给潘金莲吧.
this.panJinLian.happyWithMan();
}
}
两个女主角都上场了,男主角也该出现了: 西门庆开始召唤王婆......
package proxyPartern; /**
* @author lhb
* @类名 XiMenQing
* @描述 定义一个西门庆,这人色中饿鬼
* @时间 2022/6/8 11:19
* @版本
**/
public class XiMenQing { /** 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
* 收了不少好处费,那我们假设一下:
* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
*/ public static void main(String[] args) {
//西门庆喊王婆出厂
WangPo wangPo = new WangPo(new PanJinLian());
//虽然王婆在做.其实是代理人在爽
wangPo.makeEyessWithMan();
wangPo.happyWithMan();
}
}
王婆是个万能的代理人. 咱们再让他代理一个国际友人苍老师
先定义苍老师
package proxyPartern; /**
* @author lhb
* @类名 CangLaoShi
* @描述 苍老师 可是万能的.和谁都能happy.
* @时间 2022/6/8 11:41
* @版本
**/
public class CangLaoShi implements IWoman{
@Override
public void makeEyessWithMan() {
System.out.println("cang laoshi make some eyes to some body");
} @Override
public void happyWithMan() {
System.out.println("cang laoshi make make happy wiht some body");
}
}
西门庆又来召唤 王婆了.
package proxyPartern; /**
* @author lhb
* @类名 XiMenQing
* @描述 定义一个西门庆,这人色中饿鬼
* @时间 2022/6/8 11:19
* @版本
**/
public class XiMenQing { /** 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
* 收了不少好处费,那我们假设一下:
* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
*/ public static void main(String[] args) {
//西门庆喊王婆出厂
WangPo wangPo = new WangPo(new PanJinLian());
//虽然王婆在做.其实是代理人在爽
wangPo.makeEyessWithMan();
wangPo.happyWithMan();
//第二天 再次呼唤王婆 代理苍老师了. 前提西门庆知道王婆代理谁
wangPo = new WangPo(new CangLaoShi());
//虽然王婆在做.其实是代理的人苍老师在干活
wangPo.makeEyessWithMan();
wangPo.happyWithMan();
}
}
说完这个故事,那额总结一下,代理模式主要使用了 Java 的多态,干活的是被代理类,代理类主要是
接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗 同一个接口呗 同一个接口呗。
二 代理模式【Proxy Pattern】 来自CBF4LIFE 的设计模式的更多相关文章
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
- 代理模式(Proxy pattern)
代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...
- 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 13.代理模式(Proxy Pattern)
using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...
- 设计模式——代理模式(Proxy Pattern)
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...
- C#设计模式——代理模式(Proxy Pattern)
一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...
- 设计模式(十三):从“FQ”中来认识代理模式(Proxy Pattern)
我们知道Google早就被墙了,所以FQ才能访问Google呢,这个“FQ”的过程就是一个代理的过程.“代理模式”在之前的博客中不止一次的提及过,之前的委托回调就是代理模式的具体应用.今天我们就从“F ...
- 七个结构模式之代理模式(Proxy Pattern)
定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...
随机推荐
- ExtJS直接加载HTML页面
ExtJS直接加载HTML页面 说明 ExtJS组件很不错,但再完美也有需要其他组件的时候,比如有时候就需要引入已经写好的HTML页面.主要的方法如下. 测试环境:ExtJS 7.4 使用html配置 ...
- 过年了,基于Vue做一个消息通知组件
前言 今天除夕,在这里祝大家新年快乐!!!今天在这个特别的日子里我们做一个消息通知组件,好,我们开始行动起来吧!!!项目一览 效果很简单,就是这种的小卡片似的效果. 我们先开始写UI页面,可自定义消息 ...
- js 表面使用 表面学习 -输出
JavaScript 能够以不同方式"显示"数据: 使用 window.alert() 写入警告框 使用 document.write() 写入 HTML 输出 使用 innerH ...
- RPA应用场景-银行回单查询
场景概述银行回单查询 所涉系统名称银行网银 人工操作(时间/次) 5 分钟 所涉人工数量 4 操作频率不定时 场景流程 1.收到外派业务员申请查询收入银行回单的邮件: 2.依据邮件中提供的客户信息进入 ...
- RPA应用场景-海关报关
场景概述海关报关 所涉系统名称海关页面,业务核心系统 人工操作(时间/次) 10 分钟 所涉人工数量 3 操作频率实时 场景流程 1.每日接收报关申请邮件: 2.根据邮件信息进入业务核心系统查询相关数 ...
- python小题目练习(十一)
题目:大乐透号码生成器 需求:使用Random模块模拟大乐透号码生成器,选号规则为:前区在1 ~ 35的范围内随机产生不重复 的5个号码,后区在1~ 12的范围内随机产生不重复的2个号码.效果如图8. ...
- JavaWeb的技术体系
客户端和服务器端的交互 browser/ server(B/S)浏览器/服务器. client/server(C/S)应用/服务器.
- Java-类与对象-多态
Java类与对象-多态 多态:类与对象三大特征之一 什么是多态? 同类型的对象,执行同一个行为,会表现出不同的行为特征. 多态的形式 1.父类类型 对象名称 = new 子类构造器(); 2.接口 对 ...
- Codeforces Round #792 (Div. 1 + Div. 2) // C ~ E
比赛链接:Dashboard - Codeforces Round #792 (Div. 1 + Div. 2) - Codeforces C. Column Swapping 题意: 给定一个n*m ...
- srec_cat 常用参数的使用
前言 下面介绍映像文件工具 srec_cat 的使用,如何通过相关参数实现自己需要的功能. 下载链接:SRecord 使用方式 文件类型 在输入文件和输出文件文件时要指明文件类型,常用的如: test ...