『设计模式』小老弟你猜不透我?-- 代理模式
23种设计模式+额外常用设计模式汇总 (持续更新)
代理模式
代理模式(proxy)模式给某一个对象提供一个替身或占位符,以控制对这个对象的访问。
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。
代理模式结构
- 抽象主题(Subject)角色 声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。
- 代理主题(Proxy)角色 代理主题角色内部含有对真实主题的引用,从而可以再任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以再任何时候都可以替代真实主题; 控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除主题对象)
- 真实主题(RealSubject)角色 定义了代理角色所代表的真实对象
应用场景:
1. 远程(Remote)代理
为一个位于不同的地址空间的对象提供一个局域代表对象。可以隐藏一个对象存在于不同地址空间的事实。这个不同的地址空间可以使在本机器中,也可是在另一台机器中。远程代理又叫做大使。
可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。客户完全可以认为被代理的对象是局域的而不是远程的,而代理对象承担了大部分的网络通信工作。
2. 虚拟(Virtual)代理
代理对象可以在必要的时候才将被代理的对象加载。代理可以对加载过程加以必要的优化。当一个模块的加载十分耗费资源的时候,虚拟代理的优点就非常明显。
应用:
某个客户端不能直接操作到某个对象,担又必须和那个对象有所互动。
对于开销很大的对象,只有在使用它是才创建,这个原则可以为为我们节省很多宝贵的内存资源。
3. 保护(Protect or Access)代理(安全代理)
可以在运行时对用户的有关权限进行检查,然后在核实后决定将调用传递给被代理的对象。
授权机制:不同级别的用户对同一对象拥有不同的访问权利。
4. 智能引用(Smart Reference)代理
当一个对象呗引用是,提供一些额外的曹锁,比如讲对此对象调用的次数记录下来等。
5. Copy-on-Wright代理
虚拟代理的一种。把复制(克隆)拖延到只有在哭护短需要时,才真正采取行动。
6. Cache代理
为那些昂贵操作的结果提供临时的存储空间,一遍多个客户端可以共享这些结果。
7. 防火墙(Friewall)代理
保护目标,不让恶意用户接近。
8. 同步化(Synchronization)代理
使几个用户能够同时访问目标对象而没有冲突。
优点:
1.职责清晰。
2.高扩展性。
3.智能化。
缺点:
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
实现:
抽象主题
package Proxy;public abstract class Subject {public abstract void requestA();public abstract void requestB();public abstract void requestC();
}
真正的主题 需要被保护的
package Proxy;public class RealSubject extends Subject {@Overridepublic void requestA() {// TODO Auto-generated method stubSystem.out.println("真实的请求A ");}@Overridepublic void requestB() {// TODO Auto-generated method stubSystem.out.println("真实的请求B");}@Overridepublic void requestC() {// TODO Auto-generated method stubSystem.out.println("真实的请求C ");}}
代理主题
package Proxy;public class Proxy extends Subject{RealSubject Rs;public void requestA() {if(Rs==null)Rs=new RealSubject();Rs.requestA();};public void requestB() {if(Rs==null)Rs=new RealSubject();Rs.requestC();};public void requestC() {if(Rs==null)Rs=new RealSubject();Rs.requestC();};
}
客户端
package Proxy;public class Client {public static void main(String[] args) {Proxy proxy =new Proxy();proxy.requestA();proxy.requestB();proxy.requestC();}
}
『设计模式』小老弟你猜不透我?-- 代理模式相关推荐
- 『设计模式』Web程序开发最基本的编程模式--MVC编程模式
23种设计模式+额外常用设计模式汇总 (持续更新) 什么是MVC编程模式 ? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controlle ...
- 『设计模式』再谈Macdonald的汉堡口味--策略模式
23种设计模式+额外常用设计模式汇总 (持续更新) 类的划分原则 面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式 1.定 ...
- 『设计模式』我能进来坐坐吗?--访问者模式
23种设计模式+额外常用设计模式汇总 (持续更新) 访问者模式 访问者( Visitor )模式的定义: 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添 ...
- 『设计模式』之小试牛刀
为了更好的学习设计模式,以及督促自己完成设计模式的学习,现提笔为记. 怎么的,每周至少也要学一个设计模式!!! 恳请大家的监督和不吝赐教,共同学习和进步! 内容主要参考自<设计模式之禅>以 ...
- 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)
23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...
- 『设计模式』不看就亏了的设计模式总结
23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...
- 『设计模式』设计模式--原型模式
23种设计模式+额外常用设计模式汇总 (持续更新) 1.概念: 原型模式(Prototype Pattern)是通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同 ...
- 每天学习一个设计模式(七):结构型之代理模式
目录 一.基本概念 二.通俗解释 三.代理模式的分类 1.普通代理 2.强制代理 代理是有个性的 3.动态代理 一.基本概念 代理模式(Proxy Pattern)是一个使用率非常高的模式,其定义如下 ...
- Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)
目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...
最新文章
- 基于vue的公共looploading组件(vue循环加载--组件)
- python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价...
- MATLAB功率谱函数psd与pwelch的使用
- django-auth组件
- 容器化的 DevOps 工作流
- dede列表页if判断输出html,首页、列表页调用文章body内容的两种方法
- 位置路径 usb 获取_USB4规范解读(二):详解USB4的传输路径
- 已安装过matplotlib但提示ModuleNotFoundError: No module named ‘matplotlib‘的解决方法
- 在Ubuntu下后台持续运行Python程序
- 第二章 部署war包到tomcat
- 2016 java排名_Java计算成绩平均值和排名
- 台式计算机拆机步骤ppt,三相异步电动机拆装的方法和步骤.PPT
- linux的百度网盘客户端
- 关于 Linux中内网安装软件的一些笔记
- 《Rework》摘录及感想
- U盘安装完kali后内存变小的言diao(无图)博客
- HDU1922 POJ3004 Subway planning “神题”留名
- laravel中artisan工具(命令)的使用详解
- 《终身成长》学习总结
- 基础版微信模板消息开发详解,附代码PHP