代理设计模式
来源:互联网 发布:大数据分析的好处 编辑:程序博客网 时间:2024/06/03 22:39
代理模式
分类
- 静态代理
- 动态代理
静态代理
静态定义代理类
类图:
- 抽象角色
定义代理角色和真实角色的公共对外方法 - 真实角色
实现抽象角色,实现真正的核心逻辑 - 代理角色
实现抽象角色,通过真实角色的业务逻辑方法来实现抽象方法,可以添加自己的功能
代码
/** * * @author Nicholas 其中,sing()是核心逻辑 bookTicket() 是非核心方法 */public interface Star { /** * 唱歌 */ void sing(); /** * 订票 */ void bookTicket();}public class RealStar implements Star { @Override public void sing() { System.out.println(" real sing"); } @Override public void bookTicket() { System.out.println("real book ticket"); }}/** * 代理对象 * * @author Nicholas * */public class ProxyStar implements Star { /** * 代理对象不能唱歌,但是可以定票 * */ /** * 要代理的对象 */ private Star realStar; public ProxyStar(Star star) { this.realStar = star; } @Override public void sing() { realStar.sing(); } @Override public void bookTicket() { }}package com.weixuan.pattern.proxy;/** * Created by Nicholas on 2015/9/20. */public class Client { public static void main(String[] args){ RealStar realStar = new RealStar(); Star proxyStar = new ProxyStar(realStar); proxyStar.sing(); proxyStar.bookTicket(); }}
动态代理
动态生成代理类,不需要自己定义代理类
常见的工具
1. JDK自带的动态代理
2. javaassist字节码操作库的实现
3. CGLIB
4. asm底层使用指令
JDK自带的动态代理
核心的两个类 java.lang.reflect.Proxy
:动态生成代理类和对象 java.lang.reflect.InvocationHandler
:这个是处理器接口,可以使用invoke方法访问真实角色
代码
package com.weixuan.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyProxy implements InvocationHandler { //要代理的对象 private Star reaStar; public MyProxy(Star star) { this.reaStar = star; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(reaStar, args); return null; }}package com.weixuan.proxy;import java.lang.reflect.Proxy;public class Main { public static void main(String[] args) { Star realStar = new RealStar(); MyProxy myProxy = new MyProxy(realStar); Star proxyStar = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[] { Star.class }, myProxy); proxyStar.bookTicket(); }}
0 0
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式 代理模式
- 设计模式-【代理模式】
- 设计模式-代理模式
- 设计模式----代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式--代理模式
- 设计模式-代理模式
- 设计模式- 代理模式
- 设计模式---代理模式
- 设计模式 - 代理模式
- 【设计模式】代理模式
- SQL Server学习记录之函数
- HDU 5445 Food Problem(多重背包)
- linux下常用解压缩命令
- 模块和包的概念
- ios 开发 icon图标设置
- 代理设计模式
- C++基本知识总结
- 苹果电脑更安全? 只是因为黑客没有重视而已
- srs之bug记录
- web安全--读书笔记
- Win 7文件名或扩展名太长无法删除
- iOS的后台运行和多任务处理
- 快速离线安装.net3.5
- poj2479动态规划+两个子串最大和,一个从左往右扫描,一个从右往左扫描时在分割点变化时,找出最大的分割点是的值ans