二 代理模式【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)
定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...
随机推荐
- 前缀和与差分(Acwing795-798)
一维前缀和 Acwing795.前缀和 #include <iostream> using namespace std; const int N = 100010; int n, m; i ...
- 皓远的第二次博客作业(最新pta集,链表练习及期中考试总结)
前言: 知识点运用:正则表达式,有关图形设计计算的表达式和算法,链表的相关知识,Java类的基础运用,继承.容器与多态. 题量:相较于上次作业,这几周在java方面的练习花了更多的精力和时间,所要完成 ...
- 一分钟入门 Babel(下一代 JavaScript 语法的编译器)
简单来说把 JavaScript 中 es2015/2016/2017/2046 的新语法转化为 es5,让低端运行环境(如浏览器和 node )能够认识并执行.严格来说,babel 也可以转化为更低 ...
- Linux 文件的打包压缩
压缩和解压 压缩:为了节约磁盘空间. gzip --- .gz bzip2 --- .bz2 xz --- .xz compress --- .z 压缩比例:xz > bzip2 > gz ...
- 用console画条龙?
相识 console一定是各位前端er最熟悉的小伙伴了,无论是console控制台,还是console对象,做前端做久了,打开一个网页总是莫名自然的顺手打开控制台,有些调皮的网站还会故意在控制台输出一 ...
- 用 PyQt5 快速构建一个简单的 GUI 应用
1. 介绍 Python GUI 常用的 3 种框架是:Tkinter.wxpython.PyQt5 PyQt5 基于 Qt,是 Python 和 Qt 的结合体,可以用 Python 语言编写跨平台 ...
- Redis基础课程讲义
Redis基础 课程内容 Redis入门 Redis数据类型 Redis常用命令 在Java中操作Redis 1. 前言 1.1 什么是Redis Redis是一个基于内存的key-value结构数据 ...
- day07 聊天室-1_集合
聊天室(续) 实现服务端发送消息给客户端 在服务端通过Socket获取输出流,客户端获取输入流,实现服务端将消息发送给客户端. 这里让服务端直接将客户端发送过来的消息再回复给客户端来进行测试. 服务端 ...
- 关于 STrAduts
\(\mathbb{No \ hay \ cosa \ mas \ feliz \ en \ el \ mundo \ que \ ver \ tu \ sonrisa \ mi \ [数据删除]}\ ...
- 10 Dubbo 配置实战
Dubbo 配置实战 快速入门 dubbo 建议看这篇文章是在学习了快速入门 dubbo 那篇文章的基础上来学习 配置说明 文档地址 https://dubbo.apache.org/zh/index ...