python中代理模式分为几种类型_代理模式
JDK 自带的动态代理
java.lang.reflect.Proxy:生成动态代理类和对象;
java.lang.reflect.InvocationHandler(处理器接口):可以通过invoke方法实现
对真实角色的代理访问。
每次通过 Proxy 生成的代理类对象都要指定对应的处理器对象。
代码:
a) 接口:Subject.java
**
* @author gnehcgnaw
* @date 2018/11/5 19:29
*/
public interface Subject {
public int sellBooks();
public String speak();
}
b)真实对象:RealSubject.java
/**
* @author gnehcgnaw
* @date 2018/11/5 18:54
*/
public class RealSubject implements Subject{
@Override
public int sellBooks() {
System.out.println("卖书");
return 1 ;
}
@Override
public String speak() {
System.out.println("说话");
return "张三";
}
}
c)处理器对象:MyInvocationHandler.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 定义一个处理器
* @author gnehcgnaw
* @date 2018/11/5 19:26
*/
public class MyInvocationHandler implements InvocationHandler {
/**
* 因为需要处理真实角色,所以要把真实角色传进来
*/
Subject realSubject ;
public MyInvocationHandler(Subject realSubject) {
this.realSubject = realSubject;
}
/**
*
* @param proxy 代理类
* @param method 正在调用的方法
* @param args 方法的参数
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("调用代理类");
if(method.getName().equals("sellBooks")){
int invoke = (int)method.invoke(realSubject, args);
System.out.println("调用的是卖书的方法");
return invoke ;
}else {
String string = (String) method.invoke(realSubject,args) ;
System.out.println("调用的是说话的方法");
return string ;
}
}
}
d)调用端:Main.java
import java.lang.reflect.Proxy;
/**
* 调用类
* @author gnehcgnaw
* @date 2018/11/7 20:26
*/
public class Client {
public static void main(String[] args) {
//真实对象
Subject realSubject = new RealSubject();
MyInvocationHandler myInvocationHandler = new MyInvocationHandler(realSubject);
//代理对象
Subject proxyClass = (Subject) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Subject.class}, myInvocationHandler);
proxyClass.sellBooks();
proxyClass.speak();
}
}
gnehcgnaw
gnehcgnaw
949***604@qq.com2年前 (2018-11-13)
python中代理模式分为几种类型_代理模式相关推荐
- c语言上11e2是实型常量吗,在C语言中的实型变量分为两种类型.doc
在C语言中的实型变量分为两种类型.doc 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c='\010';则变量c中包含的字 ...
- c语言中的实型变量语法,在C语言中的实型变量分为两种类型
在C语言中的实型变量分为两种类型 第二章 练习题 一.填空题 1.在C语言中的实型变量分为两种类型,它们是float型和( )型. 2.若有定义:char c= \010 ;则变量c中包含的字符个数为 ...
- python遗传算法最短路径问题有几种类型_遗传算法求最短路径 - osc_tn8uhjgi的个人空间 - OSCHINA - 中文开源技术交流社区...
实例描述 配送中心数为 $1$,客户数 $k$为 $8$,车辆总数 $m$为 $2$:车辆载重皆为 $8$ 吨:各客户点需求为 $g(i = 1, 2, ... , 8)$(单位为吨),已知客户点与配 ...
- 四种类型的数据分析模式
在这篇博文中,我们聚焦于在数据科学领域所遇到的四种类型的数据分析模式:描述型.诊断型.预测型和指导型. 当我与刚涉足数据科学领域的年轻分析师们交谈时,通常,我会问他们认为什么是数据科学家最重要的能力. ...
- python中 是什么类型_浅谈python中的变量默认是什么类型
浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...
- 神经网络按功能分为几类,神经网络分为几种类型
神经网络有哪些主要分类规则并如何分类? 神经网络模型的分类人工神经网络的模型很多,可以按照不同的方法进行分类.其中,常见的两种分类方法是,按照网络连接的拓朴结构分类和按照网络内部的信息流向分类. 1按 ...
- 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- 云计算机根据部署方式,云计算的三种类型及部署模式
云计算的三种类型及部署模式 猫先生 • 2019 年 07 月 08 日 云计算让开发人员和 IT 部门可以全身心投入最有价值的工作,避免采购.维护.容量规划等无价值的工作分散精力.云计算已经日渐普及 ...
- python取整的几种方法,Python中取整的几种方法小结
Python中取整的几种方法小结 前言 对每位程序员来说,在编程过程中数据处理是不可避免的,很多时候都需要根据需求把获取到的数据进行处理,取整则是最基本的数据处理.取整的方式则包括向下取整.四舍五入. ...
最新文章
- Spring Boot下的Tomcat,你真的会用吗?
- linux_一些shell命令分析记录
- Spring cloud整合zookeeper
- 分布式转码初步方案(hadoop+ffmpeg)
- istio回归「单体应用」对我们的启发
- java 编写代码_Java 7:如何编写非常快速的Java代码
- Java如何加载类的呢?
- 1-1. 虚拟机控制
- linux修改默认python版本_Linux 升级 Python 并修改默认版本
- 大数据入门(一)-大数据概念和特点(1)
- 03.三月风雨愁断肠,学习大数据特别忧伤——谈谈AKS创建SQL Server大数据群集创建愁断肠
- C# 将PDF文件转换为word格式
- scratch炫酷格斗游戏
- AAC MP3音频帧采样点大小
- 我的 Serverless 实战 — Serverless 腾讯云文字识别(OCR)详细部署过程
- 利用泰勒展开式实现sin(x),cos(x)函数
- 复合函数求导定义证明,复合函数求导法则的又一证明
- android 状态栏显示 耳机图标显示,Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...
- LRU(Least Recent Used) java实现——为什么采用HashMap+双向链表
- 2023 开工大吉!爆料各司年终奖
热门文章
- r语言python print包_python : 批量下载R语言库包
- mongo执行逻辑表达式_MongoDB 高级查询
- python爬虫简单的添加代理进行访问
- 电气期刊论文实现:二进制遗传算法求解考虑输电损耗的负荷最优分配【经济调度,有代码】
- VTK:ShareCamera分享相机用法实战
- VTK:背景渐变BackgroundGradient用法实战
- wxWidgets 示例演示 wxWizard 控件
- wxWidgets:键盘 wxWidgets 示例
- wxWidgets:wxList< T >类模板的用法
- wxWidgets:wxGenericDirCtrl类用法