`

设计模式-Proxy

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

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


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

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

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

类图结构:


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


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

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

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

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


举例:
抽象角色
public interface IPay {
	public void pay();
}


真实角色:
public class ICBCPay implements IPay {

	@Override
	public void pay() {
		System.out.println("I am using ICBCPay");
	}

}


代理角色:
public class AliPay implements IPay {
	private IPay pay;
	
	public AliPay(IPay pay){
		this.pay = pay;
	}
	
	@Override
	public void pay() {
		System.out.println("Before pay");
		pay.pay();
		System.out.println("After pay");
	}

}


客户端:
public class Test {
	public static void main(String[] args) {
		IPay pay = new AliPay(new ICBCPay());
		pay.pay();
	}
}
  • 大小: 19 KB
0
0
分享到:
评论

相关推荐

    Sharding-Proxy

    Sharding-Proxy 在设计时充分考虑了性能因素,通过并行执行、结果合并优化等手段,尽可能地减少了网络延迟和计算开销,以提升整体性能。 在实际项目中,使用 Sharding-Proxy 可以帮助开发者快速构建分布式数据库...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    charles-proxy-4.6.4-win64安装包

    这个“charles-proxy-4.6.4-win64”安装包是专为 Windows 64 位系统设计的最新版本,用于帮助用户捕获、查看并分析网络数据,以便于调试和优化应用程序的网络通信。 **一、Charles 的主要功能** 1. **HTTP/HTTPS ...

    C#设计模式-吕震宇

    C#设计模式(13)-Proxy Pattern C#设计模式(12)-Decorator Pattern C#设计模式(11)-Composite Pattern C#设计模式(10)-Adapter Pattern C#设计模式(9)-Prototype Pattern C#设计模式(8)-Builder ...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    apache开源项目源码commons-proxy-1.0-src(全部高质量代理模式proxy的java源程序)

    java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其优良的代码...

    dnscrypt-proxy - 支持加密的DNS协议代理.zip

    这个压缩包文件“dnscrypt-proxy - 支持加密的DNS协议代理.zip”包含了一个名为“dnscrypt-proxy-master”的项目,它是DNSCrypt代理服务的实现,旨在提供加密的DNS查询服务,确保用户的DNS请求在传输过程中不被篡改...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    16-Proxy.rar

    在"16-Proxy.rar"中,我们可以推测包含的文件"Proxy"可能是关于代理设计模式的示例代码或文档。代理设计模式通常分为三种类型:虚拟代理、远程代理和保护代理。 1. 虚拟代理:当目标对象加载或创建需要时间时,虚拟...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    Node 使用express-http-proxy 做api网关的实现

    API网关是微服务架构中常见的一种设计模式,它作为客户端与后端服务之间的单一入口点,负责路由请求、身份验证、权限控制等任务。下面将详细解释如何通过`express-http-proxy`创建API网关,并分析提供的代码示例。 ...

    dynamic-proxy-demo.zip

    动态代理和静态代理是软件设计模式中的两种重要概念,它们主要应用于对象的增强或扩展,以便在不修改原有代码的情况下,增加新的功能或控制对象的行为。在这个“dynamic-proxy-demo.zip”压缩包中,我们可能找到了...

    26种设计模式-----pdf

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板。这个压缩包文件名为"26种设计模式",其中可能详细介绍了软件开发中的26个核心设计模式。这些模式是经过时间检验、被广泛接受并反复使用...

    设计模式复习题.doc

    "设计模式复习题.doc" 以下是根据给定文件生成的相关知识点: 1. 设计模式的种类: - 工厂方法模式 - 抽象工厂模式 - 单件模式 - 组合模式 - 外观模式 - 观察者模式 - 模板方法模式 - 迭代器模式 - 代理...

    21-Proxy_01-第十二模式.mp4

    Java设计模式精讲-代理模式

    设计模式-王翔 全本

    《设计模式-王翔 全本》是一本深入探讨软件设计模式的重要著作,作者王翔在书中详尽地阐述了设计模式的理论基础与实践应用。设计模式是软件工程中的重要概念,它代表了在特定情境下,经过时间检验、可复用的解决方案...

    C#设计模式-C#设计模式

    在软件开发领域,设计模式是经过时间和实践验证的解决方案,用于解决常见的编程问题。C#设计模式是将这些通用解决方案应用于C#编程语言的具体实践。本文将深入探讨C#中的几种重要设计模式,并阐述它们的核心概念、...

    Java 中的设计模式 - jdon

    《Java中的设计模式 - jdon》是一本深入探讨Java编程中设计模式的电子书,它主要聚焦于如何在实际开发中应用和理解这些经典的设计原则和模式。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见...

Global site tag (gtag.js) - Google Analytics