关于静态代理和动态代理代码解释
时间:2021-07-20
本文章向大家介绍关于静态代理和动态代理代码解释,主要包括关于静态代理和动态代理代码解释使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#
静态代理
####代理对象和被代理的对象其实都是为实现同一目标接口动作而被创建,只不过代理对象只是间接使用被代理对象的实现方法而去实现这个动作. 同一目标接口: //出租房子 ------------
public interface Rent { void rent(); }
被代理的对象://真实业主 ------------
public class Host implements Rent { @Override public void rent() { System.out.println("业主要出租房子"); } }
代理对象://中介 ------------
public class Proxy implements Rent { private Host host; public Proxy() { } public Proxy(Host host) { this.host = host; } @Override public void rent() { //实现业主租房的想法 host.rent(); } }
客户端: ------------
1 public static void main(String[] args) { Host host = new Host(); Proxy proxy = new Proxy(host); proxy.rent(); }
动态代理模式: ------------ 动态代理就是省去了代理对象这个实体,利用反射,在需要代理对象时自动创建 同一目标接口://租房 ------------
public interface Rent { void rent(); }
被代理对象://业主租房 ------------
public class Host implements Rent { @Override public void rent() { System.out.println("房东要出租房子"); } }
动态代理对象://生成代理的中介 ------------
public class ProxyInvocationHandler implements InvocationHandler { private Object target; public void setRent(Object target) { this.target = target; } //生成代理对象 public Object getProxy() { return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } //处理代理实例 返回结果 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object invoke = method.invoke(target, args); return invoke; } }
客户端: ------------
public static void main(String[] args) { Host host = new Host(); ProxyInvocationHandler pih = new ProxyInvocationHandler(); pih.setRent(host); Rent proxy = (Rent) pih.getProxy(); proxy.rent(); }
原文地址:https://www.cnblogs.com/wangjiawei1234/p/15037134.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Metal入门教程(三)摄像头采集渲染
- Java面试中常考关键字
- Metal入门教程(四)灰度计算
- 最长公共子序列
- 为什么说Java是“write once and run anywhere”的语言?
- B站课程《三阴性乳腺癌表达矩阵探索》笔记之文献解读
- Docker简易笔记
- python面试题搜集:史上最全python面试题详解(二)
- Python操作Redis
- Django入门笔记:身份认证模块
- Go数据结构与算法之内置类型
- MySQL 高可用之双机热备
- 从Go语言开始,彻底学懂数据结构与算法 -- 线性表
- Spring的Bean管理(XML方式)
- 2020Java高频面试题--Java知识点汇总