Design Pattern—— Dynamic Proxy Pattern(三) 动态代理模式

2024-08-30 03:58

本文主要是介绍Design Pattern—— Dynamic Proxy Pattern(三) 动态代理模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

done by myself


通过下面例子,进一步演示 动态代理 的强大特性,将会体会到 相对于静态static代理,动态可实现 一个proxy代理不同的真实对象。灵活多变。只需要在Client类 调整要代理的角色,无需改动其他部分。使代理角色、真实角色的对应关系更松散了。


抽象角色:

package com.proxy.severalCase;public interface AbstractRole {void print();void sayHello();
}

两个真实角色:

package com.proxy.severalCase;public class RealRole1 implements AbstractRole{@Overridepublic void print() {System.out.println("Printed By RealRole One.");}@Overridepublic void sayHello() {System.out.println("Hello from RealRole One.");}
}

package com.proxy.severalCase;public class RealRole2 implements AbstractRole{@Overridepublic void print() {System.out.println("Printed By RealRole Two.");}@Overridepublic void sayHello() {System.out.println("Hello from RealRole Two.");}
}

实现InvocationHandler的类:

package com.proxy.severalCase;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class InvocationClass implements InvocationHandler {private Object proxyRole;public InvocationClass(Object o) {this.proxyRole = o;}public InvocationClass() {}public void setProxyRole(Object o) {this.proxyRole = o;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {return method.invoke(proxyRole, args);}}

Client类:

package com.proxy.severalCase;import java.lang.reflect.Proxy;public class Client {public static void main(String[] args) {AbstractRole proxyRole = null; //同一个代理proxy 代理不同的真实对象InvocationClass handler = new InvocationClass();handler.setProxyRole(new RealRole1());proxyRole = (AbstractRole) Proxy.newProxyInstance(InvocationClass.class.getClassLoader(),new Class[] { AbstractRole.class }, handler);proxyRole.print();proxyRole.sayHello();System.out.println("-------------------------------");handler.setProxyRole(new RealRole2());proxyRole = (AbstractRole) Proxy.newProxyInstance(handler.getClass().getClassLoader(), proxyRole.getClass().getInterfaces(),handler);proxyRole.print();proxyRole.sayHello();}
}

输出结果:




这篇关于Design Pattern—— Dynamic Proxy Pattern(三) 动态代理模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119726

相关文章

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题

《SpringBoot利用dynamic-datasource-spring-boot-starter解决多数据源问题》dynamic-datasource-spring-boot-starter是一... 目录概要整体架构构想操作步骤创建数据源切换数据源后续问题小结概要自己闲暇时间想实现一个多租户平台,

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配