java23种设计模式之五:代理模式
一.代理模式介绍
代理模式的定义:就是为一个接品(对象)提供一个代理的对象,并由这个代理对象控制对原对象的访问流程
其中代理又分为:静态代理和动态代理
静态代理:指的是自己要写一个代理类,或者用工具生成一个代理类,总之就是程序运行之前已经存且编译好的代理类.(自己写的类)
动态代理:指由JVM虚拟机程序运行时产生的代理类。(jvm或第三方生成的类)
动态类具有更强的灵活性,它不用在我们设计实现类时指定哪个类被代理了。
二.动态代理
覆盖InvocationHandler接口中的invoke()方法,更重要的是,动态代理模式可以使得我们在不改变原来已有的代码结构的情况下,对原来的原有进行扩展、增强其功能,并且可以达到控制被代理对象的行为。
每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。
public class DynamicProxy implements InvocationHandler{// 被代理类的实例 Object proxy;public DynamicProxy(Object proxy) {this.proxy = proxy;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = method.invoke(this.proxy, args);return null;}}public interface ProxySSSS {public void buyCar(int cash); }public class User implements ProxyInterface{private int cash; //花费private String name;public User(int cash,String name){this.cash = cash;this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getCash() {return cash;}public void setCash(int cash) {this.cash = cash;}public void buyCar() {System.out.println("花 "+cash +"钱买车");}}
动态代理测试类
public class MainTest {public static void main(String[] args) {User user = new User("张三",1000);InvocationHandler handler = new DynamicProxy(user);/*** 每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。我们来看看InvocationHandler这个接口的唯一一个方法 invoke 方法:* Proxy.newProxyInstance 3个参数的意思:* handler.getClass().getClassLoader() : 获取代理类的加载 器来加载动态代理类对象* user.getClass().getInterfaces() : 该对象的方法就是代理类所代理的方法* handler : InvocationHandler 对象*/ProxySSSS instance = (ProxySSSS)Proxy.newProxyInstance(handler.getClass().getClassLoader(), user.getClass().getInterfaces(), handler);instance.buyCar(user.getCash());} }
转载于:https://www.cnblogs.com/MrRightZhao/p/10815311.html
java23种设计模式之五:代理模式相关推荐
- 一天一种设计模式之五-----代理模式
2019独角兽企业重金招聘Python工程师标准>>> 一.代理模式简介 代理模式属于结构型模式 定义:代理模式为其他对象提供一种代理以控制对这个对象的访问. 代理模式是java框架 ...
- 23种设计模式7_代理模式之一静态代理
23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...
- 带你认识4种设计模式:代理模式、装饰模式、外观模式和享元模式
摘要:本文我们主要介绍结构型模式中的代理模式.装饰模式.外观模式和享元模式. 本文分享自华为云社区<快来,这里有23种设计模式的Go语言实现(三)>,原文作者:元闰子 . 设计模式(Des ...
- 23种设计模式之代理模式
文章目录 代理模式的定义与特点 代理模式的结构与实现 模式的结构 模式的实现 代理模式的应用场景 代理模式的应用实例 代理模式的扩展 代理模式分类 静态代理 动态代理 在有些情况下,一个客户不能或者不 ...
- 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之代理模式
· 代理模式在王者荣耀中的应用 · 应用一(虚拟代理模式) 应用二(远程代理模式) 应用三(充值送好礼) 一.简述 应用一: 在王者荣耀这款游戏里,设置有很多种娱乐游戏模式,比如:无限乱斗.梦境大乱斗 ...
- 23种设计模式之代理模式(动态代理)
代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式的组成 抽 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...
- Java23种设计模式之工厂模式
工厂模式 前言 一.简单工厂模式 二.工厂方法模式 优点: 缺点: 三.工厂方法模式适合应用场景 总结 前言 核心本质: 1.实例化对象不使用new,用工厂方法代替, 2.将选择实现类,创建对象统一管 ...
- 23三种设计模式之代理模式
一.概念 通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用 ...
最新文章
- js取一定范围内的随机整数
- JS控制图片显示的大小(图片等比例缩放)
- 计算机组成原理we指什么,计算机组成原理课后习题答案一到九章
- 科大星云诗社动态20210315
- idea打印sql的插件_[Mybatis]-[基础支持层]-插件-自定义简易SQL打印插件
- mysql静默安装_oracle静默安装文件db_install.rsp详解
- linux对web后端重要吗,基于Linux的Web服务器性能测试
- perl里q,qq,qw等的用法
- mac系统下设置eclipse的补全快捷键方法
- Win10系统,ColorPix取色位置偏移如何解决?
- 小程序体验版无法显示内容
- BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】...
- 再见2018,你好2019!
- 【寻找最佳小程序】03期:摩拜单车小程序——联合微信团队打造,实现不换码一扫即用
- 电脑连接打印机并共享及其他打印机连接
- 《爱乐之城》配色分享
- Java将.docx文件转换为.pdf文件
- python编程语言零基础入门-零基础学习编程,Java、Python你会选择哪个?
- ecdsa JAVA 私钥推导公钥_ECDSA(椭圆曲线数字签名算法)
- SCI论文写作神器集合 —— 超级实用
热门文章
- linux如何移动数据到文件系统,怎么把数据文件从文件系统移动到asm?
- oracle 赋值到cmd,CMD操作oracle数据导库过程图解
- linux100day(day7)--用户管理和权限管理简单介绍
- 第一个Python程序hello.py提示出现File stdin,line 1错误
- Docker入门(CentOS7)
- CentOS7安装Docker与使用篇
- .NET 4.5 Task异步编程学习资料
- 懒加载 jquery代码
- 淘宝API调用 申请 获取session key
- C#学习笔记——软件注册与注册机