20171030_chr_proxy 代理模式(动态代理)
代理模式(动态代理)
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/Dog.java
package nuc.sw.dynamic.proxy;public interface Dog {public void info();public void run();public void cry();
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/DogImpl.java
package nuc.sw.dynamic.proxy;public class DogImpl implements Dog {@Overridepublic void info() {// TODO Auto-generated method stubSystem.out.println("一只薛皮皮");}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("薛皮皮骑着Clearlove7的猪跑了");}@Overridepublic void cry() {// TODO Auto-generated method stubSystem.out.println("薛皮皮成为嚎哭深渊领主");}}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/MyInterceptor.java
package nuc.sw.dynamic.proxy;public class MyInterceptor {public void method1() {System.out.println("模拟Struts框架中访问action之前拦截器执行的代码");}public void method2() {System.out.println("模拟Struts框架中访问action之后拦截器执行的代码");}
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/MyProxyFactory.java
package nuc.sw.dynamic.proxy;import java.lang.reflect.Proxy;public class MyProxyFactory {public static Object getProxy(Object object,String methodName) {ProxyHandler handler=new ProxyHandler(object, methodName);return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), handler); }
}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/ProxyHandler.java
package nuc.sw.dynamic.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class ProxyHandler implements InvocationHandler {private Object target;private String methodName;private MyInterceptor mi=new MyInterceptor();public ProxyHandler(Object target,String methodName) { this.target=target;this.methodName=methodName;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// TODO Auto-generated method stubObject result=null;if(method.getName().equals(methodName)) {mi.method1();result=method.invoke(target, args);mi.method2();}else {result=method.invoke(target, args);}return result;}}
- /20171030_chr_proxy/src/nuc/sw/dynamic/proxy/TestDynamicProxy.java
package nuc.sw.dynamic.proxy;import nuc.sw.proxy.*;public class TestDynamicProxy {public static void main(String[] args) {// TODO Auto-generated method stub//案例一:狗代理//1.产生一个真实主题角色Dog dog=new DogImpl();//2.代理主题角色Dog dogProxy=(Dog) MyProxyFactory.getProxy(dog, "info"); //3.通过代理主题角色访问真实主题角色方法dogProxy.info();dogProxy.run();dogProxy.cry();//案例二BookAbstractSubject publisher=new Publisher();BookAbstractSubject publisherProxy=(BookAbstractSubject)MyProxyFactory.getProxy(publisher, "saleBook");publisherProxy.saleBook();}}
- /20171030_chr_proxy/src/nuc/sw/proxy/BookAbstractSubject.java
package nuc.sw.proxy;public interface BookAbstractSubject {public void saleBook();
}
- /20171030_chr_proxy/src/nuc/sw/proxy/Publisher.java
package nuc.sw.proxy;public class Publisher implements BookAbstractSubject{public void saleBook() {// TODO Auto-generated method stubSystem.out.println("真实主题角色出版社卖书");}public void makeBook() {System.out.println("真实主题角色出版社造书");}
}
- /20171030_chr_proxy/src/nuc/sw/proxy/ShoppingOnline.java
package nuc.sw.proxy;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class ShoppingOnline implements BookAbstractSubject{private Publisher publisher=new Publisher();public void presaleBook() {// TODO Auto-generated method stubSystem.out.println("代理主题角色网上商店买书前宣传");}public void postsaleBook() {System.out.println("代理主题角色网上商店卖书后售后服务");}public void saleBook() {// TODO Auto-generated method stub/*this.presaleBook();publisher.saleBook();this.postsaleBook();publisher.makeBook();*/this.invoke();}//获取真实主题角色的所有方法,如果方法名为saleBook,完成上面的活儿,否则不管(反射机制)public void invoke() {Method[] methods=publisher.getClass().getMethods();for(int i=0;i<methods.length;i++) {try {if(methods[i].getName().equals("saleBook")) { this.presaleBook();methods[i].invoke(publisher);this.postsaleBook(); }else {methods[i].invoke(publisher); } } catch (IllegalAccessException e) { } catch (IllegalArgumentException e) {} catch (InvocationTargetException e) {} }}
}
- /20171030_chr_proxy/src/nuc/sw/proxy/TextProxy.java
package nuc.sw.proxy;public class TextProxy {public static void main(String[] args) {// TODO Auto-generated method stubShoppingOnline so=new ShoppingOnline();//so.saleBook();so.invoke();}}
20171030_chr_proxy 代理模式(动态代理)相关推荐
- 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )
文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...
- 红橙Darren视频笔记 代理模式 动态代理和静态代理
红橙Darren视频笔记 代理模式 动态代理和静态代理(Android API 25) 关于代理模式我之前有过相关的介绍: https://blog.csdn.net/u011109881/artic ...
- 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )
文章目录 前言 一.静态代理的弊端 二.动态代理的优势 三.动态代理使用流程 1.目标对象接口 2.被代理对象 3.调用处理程序 4.客户端 四.动态生成 代理对象 类 的 字节码 文件数据 前言 代 ...
- Proxy 代理模式 动态代理 CGLIB
代理的基本概念 几个英文单词: proxy [ˈprɒksi] n. 代理服务器:代表权:代理人,代替物:委托书: invoke [ɪnˈvəʊk] vt. 乞灵,祈求:提出或授引-以支持或证明:召鬼 ...
- Java设计模式-之代理模式(动态代理)
一.简介 1.什么叫代理模式: 简而言之就是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起 ...
- 【设计模式】代理模式 ( 动态代理 )
文章目录 一.动态代理使用流程 二.动态代理代码示例 1.订单类 2.Service 接口 3.Service 实现类 4.Service 静态代理类 5.Dao 接口 6.Dao 实现类 7.Ser ...
- 代理模式(动态代理)
动态代理.就是不用自己写代理类,只要实现接口就行了. 动态代理,这里介绍两种:jdk and cglib 第一个jdk //一个接口类 public interface Book{void read( ...
- Spring AOP中的静态代理和动态代理的原理和实践
对于最近博主最近写博客的兴致大发,我也在思考:为什么而写博客?在互联网时代,无论你是牛人大咖,还是小白菜鸟,都有发表自己看法的权利.无论你是对的还是错的,都会在这个平台上找到答案.所以,我会尽可能去写 ...
- 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理
这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...
- 【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
最新文章
- python中calendar怎么用_Python时间模块datetime、time、calendar的使用方法
- Deepin系统安装
- Spring @Autowired 注入为 null
- Could not read from remote repository
- 原创 MySQL探秘(八):基于Redo Log和Undo Log的MySQL崩溃恢复流程(一致性)
- cocos2d-x游戏开发(十一)细说场景切换
- 愚蠢的怪胎技巧:通过命令行管理SkyDrive
- 复数幂用java程序怎么求_蓝桥杯——复数幂 (2018JavaAB组第3题)
- Bzoj3576 [Hnoi2014]江南乐
- scipy —— 丰富的子包(io、cluster)
- 这些面试机会,你该主动放弃!
- java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除
- 天锐绿盾教您如何管控外接设备
- 11种绕过CDN查找真实IP方法(查找网站真实IP地址、查找域名真实IP)
- Android Compose 新闻App(五)Room复杂数据、AlertDialog弹窗、页面导航
- PHP字符串函数stripslashes(反引用一个addslashes转义的字符串)
- 【数论】Pollard-Rho 算法总结
- 大学一年级计算机组成语结构试题,一年级语文上册期末:词语类考题全面练习(汇总版)...
- Google镜像搭建:利用 Cloudflare Workers 搭建访问谷歌镜像站点,可自行绑定域名
- 笔记-知识产权与标准化知识-中华人民共和国政府采购法
热门文章
- jar 坐标系转换工具_java jar生成maven坐标
- 计算机平面设计创意教案,平面设计教案1
- 黑苹果NVIDIA显卡驱动程序【 WebDriver-387.10.10.10.40.135+支持	macOS 10.13.6 High Sierra (17G12034)版本】
- lambda函数if_Python中lambda的使用,与它的三个好基友介绍!
- 用Python的selenium库模仿人点击相关网页刷阅读量实例
- Unity 按键控制相机(移动、旋转、相机角度控制)
- linux rman删除备份,【RMAN】【RMAN命令】DELETE 命令(5)--删除特定备份集(不提示)
- 为什么用「void 0」代替「undefined」
- 51单片机STC89C52RC进阶 – 在面包板上构建51单片机最小系统
- 乌海计算机打印准考证,2016年下半年乌海计算机一级准考证打印入口及网址,计算机等级考试时间查询...