设计模式----代理模式
时间:2021-08-24
本文章向大家介绍设计模式----代理模式,主要包括设计模式----代理模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天来介绍一种相对简单的设计模式 ---- 代理模式
比如说你想追一位女生,但是你跟她不熟,就可以找一个你和她都很熟的Proxy(代理)去完成你想要进行的动作
不要想歪哦,我说的是送礼物之类的 (doge)
我们首先来看这个设计模式的类图
是不是很简单哇~
看看代码~
package proxy.template; /**@author 陈柏宇 * Subject类,定义了 RealSubject 和 Proxy(代理) 的共用接口,这样就在任何使用RealSubject * 的地方都可以使用Proxy(代理) * 这个类里面的方法也就是 RealSubject 希望 Proxy(代理) 代理的方法 */ public abstract class Subject { /** * 抽象方法,RealSubject 希望 Proxy(代理) 代理的方法 */ public abstract void request(); }
package proxy.template; /** * @author 陈柏宇 * 真实实体 真正意愿的实体 */ public class RealSubject extends Subject{ @Override public void request() { System.out.println("真实实体的请求"); } }
package proxy.template; /** * @author 陈柏宇 * 代理者 代理真实实体的动作 */ public class Proxy extends Subject{ RealSubject realSubject; @Override public void request() { if(realSubject == null) { realSubject = new RealSubject(); } realSubject.request(); } }
客户端代码:
public static void main(String[] args) { Proxy proxy = new Proxy(); proxy.request(); }
终端显示:
真实实体的请求
接下来我们来看一个例子:比如说你想追一位女生,你让一个人来代理你的动作
package proxy; /** * @author 陈柏宇 * 送礼物接口 代理者代理的我要送的礼物 */ public abstract class IGivePresent { /** * 送玩偶 (不是Hong Kong的那位) */ public abstract void giveDoll(); /** * 送巧克力 */ public abstract void giveChocolate(); /** * 送鲜花 */ public abstract void giveFlower(); }
package proxy; /** * @author 陈柏宇 * 追求者 动作的意愿发起者 */ public class Pursuit extends IGivePresent{ SchoolGirl mm; public Pursuit(SchoolGirl mm) { this.mm = mm; } @Override public void giveDoll() { System.out.println( "送你玩偶,我亲爱的" + mm.getName()); } @Override public void giveChocolate() { System.out.println( "送你巧克力,我亲爱的" + mm.getName()); } @Override public void giveFlower() { System.out.println( "送你鲜花,我亲爱的" + mm.getName()); } }
package proxy; /** * @author 陈柏宇 * 代理,用来发出追求者想发出的动作 */ public class Proxy extends IGivePresent{ Pursuit pursuit; public Proxy(SchoolGirl mm) { this.pursuit = new Pursuit(mm); } @Override public void giveDoll() { pursuit.giveDoll(); } @Override public void giveChocolate() { pursuit.giveChocolate(); } @Override public void giveFlower() { pursuit.giveFlower(); } }
main函数:
public class ProxyTest { public static void main(String[] args) { SchoolGirl mm = new SchoolGirl("beauty"); Proxy p = new Proxy(mm); p.giveChocolate(); p.giveDoll(); p.giveFlower(); } }
控制台输出:
送你巧克力,我亲爱的beauty
送你玩偶,我亲爱的beauty
送你鲜花,我亲爱的beauty
是不是很简单呀~
那么这个设计模式有哪些应用呢?
/** * @author cby * 那么这种设计模式一般用在什么场合呢? * * (1)远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象 * 存在于不同地址空间的事实 * 就好比一个快捷方式,我们的桌面图标的应用往往都不在桌面的那个文件夹里 * * (2)虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象 * 比如你打开一个很大的HTML网页时里面可能有很多的图片和文字,但是你还是可以很快打开它 * 此时你所看到的是所有的文字,但是图片是一张张下载才可以看到,那些未打开的图片框, * 就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸 * * (3)安全代理,用来控制真实对象访问时的权限 * * (4)智能指引:是指当调用真实的对象时,代理处理另外一件事 * */
原文地址:https://www.cnblogs.com/apakchan/p/15181341.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django+Vue开发生鲜电商平台之6.使用Vue实现商品类别和商品数据前台显示
- 【程序源代码】基于Python开发的Markdown在线文档系统
- 深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
- Numpy中的两个乱序函数
- PerfDog4.0探索,支持用户自建web云
- 跨帐号访问COS资源
- 聊聊dubbo-go的DubboProtocol
- 推荐一个很牛叉的开源Flask项目
- 机器学习应用资产管理系列一:强化学习策略(附代码)
- 3分钟短文 | Laravel模型关联删除表记录,用观察者还是事件钩子
- 原理+代码|深入浅出Python随机森林预测实战
- 3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用域你没用过
- 3分钟短文 | Laravel同时连接多个数据库,你用啥办法?
- 3分钟短文 | PHP 连接2个字符串的8个方法,新手常犯错
- nodejs源码分析之connect