二 代理模式【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)
定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...
随机推荐
- SpringBoot之:SpringBoot的HATEOAS基础
目录 简介 链接Links URI templates Link relations Representation models 总结 简介 SpringBoot提供了HATEOAS的便捷使用方式,前 ...
- python 基础知识-day10(面向对象)
1.面向对象的概念 拥有共同属性的一类进行归类的过程叫做面向对象. 2.注意事项 class定义类的时候,类名的首字母必须大写 3.面向对象案例 1 class Person(object): 2 d ...
- 简单ELK配置实现生产级别的日志采集和查询实践
概述 生产问题 集群规模如何规划? 集群中节点角色如何规划? 集群之脑裂问题如何避免? 索引分片如何规划? 分片副本如何规划? 集群规划 准备条件 先估算当前系统的数据量和数据增长趋势情况. 现有服务 ...
- Spring框架系列(14) - SpringMVC实现原理之DispatcherServlet处理请求的过程
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet ...
- Tapdata 在线研讨会:实时数据同步应用场景及实现方案探讨
数字化时代的到来,企业业务敏捷度的提升,对传统的数据处理和可用性带来更高的要求,实时数据同步技术的发展,给基于数据的业务创新带来了更多的可能性.9月8日晚,Tapdata 联合MongoDB 中文社区 ...
- Java变量和Scanner类
1.变量的分类1)按数据类型分类 详细说明: 1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节) ① byte范围:-128 ~ ...
- dubbox 入门demo
1.Dubbox简介 Dubbox 是一个分布式服务架构,其前身是阿里巴巴开源项目 Dubbo,被国内电商及互联网项目使用,后期阿里巴巴停止了该项目的维护,当当网便在 Dubbo 基础上进行优化,并继 ...
- 基于串口校时的数字钟设计(verilog实现)
任务: 电路图设计: 设计: 模块1:1.先设计一个计数时钟,为了仿真方便,这里把1000ns当作1s. 创建一个计数器second_lim,当计数到1000/20时清零,即1s. 秒显示器secon ...
- 同时安装py2和py3-安装多版本python
遇到问题和需求 我的电脑环境:先安装py2再安装py3,平时我工作中是使用python2,如何保证两个版本共存且让代码来选择要使用的版本. 遇到问题 在cmd中输入python,进入的是py2的环境, ...
- python主动杀死线程
简介 在一些项目中,为了防止影响主进程都会在执行一些耗时动作时采取多线程的方式,但是在开启线程后往往我们会需要快速的停止某个线程的动作,因此就需要进行强杀线程,下面将介绍两种杀死线程的方式. 直接强杀 ...