设计模式-Proxy

代理模式: 
1、表现为了控制对真实对象的访问,提供一个代理的角色,客户端通过调用代理实现访问真实对象。 
2、表现为 对真实对象的操作进行拦截,再调用真实对象前后,代理对象做一些操作

特点: 
1、代理对象和真实对象有公共的接口,这个接口暴露给客户端。 
2、代理对象持有真实对象 
3、客户端通过访问代理对象 实现访问真实对象的目的 
4、代理对象可以在调用真实对象前或者后 做特定的操作

角色划分: 
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。代理对象可以在客户端和目标对象之间起到中介的作用。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

核心: 下载
代理模式的核心是代理角色,代理角色通过拦截客户端的调用,在调用真实角色的操作前后,执行个性化的操作。

代理模式分为静态代理、动态代理。 
静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。

动态代理:jdk 提供了InvocationHandler以及Proxy支持;cglib也提供了类似的功能

动态代理 是spring 实现 aop功能 的基础特性 下载

举例: 
抽象角色 下载

Java代码

  1. public interface IPay {
  2. public void pay();
  3. }

真实角色:

Java代码

  1. public class ICBCPay implements IPay {
  2. @Override
  3. public void pay() {
  4. System.out.println("I am using ICBCPay");
  5. }
  6. }

代理角色: 下载

Java代码

  1. public class AliPay implements IPay {
  2. private IPay pay;
  3. public AliPay(IPay pay){
  4. this.pay = pay;
  5. }
  6. @Override
  7. public void pay() {
  8. System.out.println("Before pay");
  9. pay.pay();
  10. System.out.println("After pay");
  11. }
  12. }

客户端: 下载

Java代码

  1. public class Test {
  2. public static void main(String[] args) {
  3. IPay pay = new AliPay(new ICBCPay());
  4. pay.pay();
  5. }
  6. }
时间: 2024-07-31 01:57:44

设计模式-Proxy的相关文章

Java设计模式—Proxy动态代理模式

代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 图 1. 代理模式 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别.通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性.Java 动态代理机制以巧妙的方式近乎完

Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问"茴香豆的茴字有哪几种写法?" 所谓代理模式,是指客户端(Client)并不直接调用实际的对象(下图右下角的RealSubject),而是通过调用代理(Proxy),来间接的调用实际的对象. 代理模式的使用场合,一般是由于客户端不想直接访问实际对象,或者访问实际的对象存在技术上的障碍,因而通过代理对象作为桥梁,来完成间接访问. 实现方式一:静态代理 开发一个接口IDev

设计模式-Proxy(结构型模式)

以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Proxy.h #pragma once class Subject { public: virtual ~Subject(); virtual void Request() = 0; protected: Subject(); }; class ConcreateSubject:public Subject { public: ~ConcreateSubject(); ConcreateSubject(); void

Java设计模式——Proxy(代理)模式

Proxy(代理)模式为对象提供一个代理或者占位来控制对该对象的访问. 图像代理 使用Proxy模式的设计有时非常脆弱,它们依赖转发方法来调用其底层对象.转发可能会建立一个非常脆弱并且需要经常维护的设计. load()方法以JFrame对象为参数,用于在指定图像加载完毕之后进行回调.在执行load()方法的时候,它先以LOADING引用的图像对象为参数调用setImage(),然后重新绘制图形显示窗口,最后为自己启动一个单独的线程.而run()方法是在单独的线程中执行的,该方法根据构造器中指定的

[C++设计模式] proxy 代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问. Proxy: 保存一个引用使得代理可以访问实体.若RealSubject和Subject的接口相同,Proxy会引用Subject,就相当于在代理类中保存一个Subject指针,该指针会指向RealSubject: 提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体: 控制对实体的存取,并可能负责创建和删除它: 其它功能依赖于代理的类型,例如: 远程代理负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求

设计模式--代理(Proxy)模式

在公司,经常性听到采购部的人说采购某样东材料,采购不了,需要通过代理商才可以.以前Insus.NET也做有一个练习<找人办事,代理设计模式(Proxy)>http://www.cnblogs.com/insus/archive/2013/02/27/2935081.html .理解起来跟公司的采购员找代理商采购是一样的道理. 统一的行为,就是采购,不管是公司的采购员还是代理商: 公司的采购员: 代理商: OK,实现环境: 演示: 代理模式实际环境中很多.比如我们想租或买房,均可以让代码帮助我们

《PHP设计模式大全》系列技术文章整理收藏

<PHP设计模式大全>系列技术文章整理收藏 1php设计模式介绍之值对象模式第1/5页http://www.lai18.com/content/375691.html 2php设计模式介绍之编程惯用法第1/3页http://www.lai18.com/content/375692.html 3介绍php设计模式中的工厂模式http://www.lai18.com/content/375622.html 4php设计模式 Command(命令模式)http://www.lai18.com/con

Java 设计模式实现 不错的引用

这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JAVA设计模式-Builder JAVA设计模式-Prototype 结构型模式: JAVA设计模式-Adapter JAVA设计模式-Bridge JAVA设计模式-Composite JAVA设计模式-Decorator JAVA设计模式-Facade JAVA设计模式-FlyWeight JAV

浅谈源码的七大设计模式

本文会介绍一些经典的设计模式思想: 常用设计模式 Proxy代理模式 代理模式:为其他对象提供一种代理以便控制对这个对象的访问. 可以详细控制访问某个类(对象)的方法,在调用这个方法前作的前置处理(统一的流程代码放到代理中处理).调用这个方法后做后置处理. 代理模式分类: 1.静态代理(静态定义代理类,我们自己静态定义的代理类.比如我们自己定义一个明星的经纪人类) 2.动态代理(通过程序动态生成代理类,该代理类不是我们自己定义的.而是由程序自动生成)比较重要!! JDK自带的动态代理 javaa