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.智能化。

缺点:

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

实现:


抽象主题

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();}
}

『设计模式』小老弟你猜不透我?-- 代理模式相关推荐

  1. 『设计模式』Web程序开发最基本的编程模式--MVC编程模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 什么是MVC编程模式 ? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controlle ...

  2. 『设计模式』再谈Macdonald的汉堡口味--策略模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 类的划分原则 面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式 1.定 ...

  3. 『设计模式』我能进来坐坐吗?--访问者模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 访问者模式 访问者( Visitor )模式的定义: 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添 ...

  4. 『设计模式』之小试牛刀

    为了更好的学习设计模式,以及督促自己完成设计模式的学习,现提笔为记. 怎么的,每周至少也要学一个设计模式!!! 恳请大家的监督和不吝赐教,共同学习和进步! 内容主要参考自<设计模式之禅>以 ...

  5. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  6. 『设计模式』不看就亏了的设计模式总结

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  7. 『设计模式』设计模式--原型模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 1.概念: 原型模式(Prototype Pattern)是通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同 ...

  8. 每天学习一个设计模式(七):结构型之代理模式

    目录 一.基本概念 二.通俗解释 三.代理模式的分类 1.普通代理 2.强制代理 代理是有个性的 3.动态代理 一.基本概念 代理模式(Proxy Pattern)是一个使用率非常高的模式,其定义如下 ...

  9. Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)

    目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...

最新文章

  1. 基于vue的公共looploading组件(vue循环加载--组件)
  2. python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价...
  3. MATLAB功率谱函数psd与pwelch的使用
  4. django-auth组件
  5. 容器化的 DevOps 工作流
  6. dede列表页if判断输出html,首页、列表页调用文章body内容的两种方法
  7. 位置路径 usb 获取_USB4规范解读(二):详解USB4的传输路径
  8. 已安装过matplotlib但提示ModuleNotFoundError: No module named ‘matplotlib‘的解决方法
  9. 在Ubuntu下后台持续运行Python程序
  10. 第二章 部署war包到tomcat
  11. 2016 java排名_Java计算成绩平均值和排名
  12. 台式计算机拆机步骤ppt,三相异步电动机拆装的方法和步骤.PPT
  13. linux的百度网盘客户端
  14. 关于 Linux中内网安装软件的一些笔记
  15. 《Rework》摘录及感想
  16. U盘安装完kali后内存变小的言diao(无图)博客
  17. HDU1922 POJ3004 Subway planning “神题”留名
  18. laravel中artisan工具(命令)的使用详解
  19. 《终身成长》学习总结
  20. 基础版微信模板消息开发详解,附代码PHP

热门文章

  1. virtual box虚拟机分区后下一步看不见解决
  2. html搜索框美化代码单词,CSS 漂亮搜索框美化代码
  3. iOS API离线文档下载和查阅
  4. rm 给你一个反悔的机会
  5. Docker搭建NSQ实时分布式消息集群
  6. 中国人自己的框架——蚂蚁金服RPC框架结构分析
  7. Intel大坑之中的一个:丢失的SSE2 128bit/64bit 位移指令,马航MH370??
  8. spring之bean的作用域scope的值的详解
  9. Web前端开发人员和设计师必读文章推荐【系列六】
  10. Windows7 Credential Manage