java设计模式___Proxy代理模式
来源:互联网 发布:宋神宗资治通鉴序 知乎 编辑:程序博客网 时间:2024/06/14 10:56
简述
二月十四号情人节日,在这一天真是吃了大把大把的狗粮啊!我朋友想给他女朋友买了个苹果7作为情人节礼物,可是手里钱不够怎么办呢,恰好我手里有一些闲钱,于是我就代他先买个苹果7,这一波狗粮吃的十分过瘾啊!其实这就是一种代理。下面用代码详细说明一下:公共接口的设计(买苹果7)
/** * Created by Administrator on 2017/2/17 0017. * @param 公共接口 * * 代理模式: * 我代朋友买了一个苹果7,送给他女朋友 * 成员:我 我朋友 * 我朋友自己也能买,由于资金的问题我代替他买了,然后送给他女朋友 * 我其实就是代理类 我朋友就是被代理类 */public interface WasProxy_interface { void buy1(String s); void buy2(); void buy3(); void buy4();}
- 被代理类(我朋友)
需要实现公共接口
/***@param 被代理类*/public class MyFriends implements WasProxy_interface { private String Tag="Me_proxy"; @Override public void buy1() { Log.e(Tag,"Proxy买手机1"); } @Override public void buy2() { Log.e(Tag,"Proxy买手机2"); } @Override public void buy3() { Log.e(Tag,"Proxy买手机3"); } @Override public void buy4() { Log.e(Tag,"Proxy买手机4"); }}
- 代理类(我)
需要实现公共接口
/** * Created by Administrator on 2017/2/17 0017. * @param 代理类 */public class Repairman implements WasProxy_interface{ /** * 构造方法里声明公共接口 * */ private WasProxy_interface wasProxy_interface; public Repairman(WasProxy_interface wasProxy_interface){ this.wasProxy_interface=wasProxy_interface; } @Override public void buy1() { wasProxy_interface.buy1(); } @Override public void buy2() { wasProxy_interface.buy2(); } @Override public void buy3() { wasProxy_interface.buy3(); } @Override public void buy4() { wasProxy_interface.buy4(); }}
- 调用
/***这种方式是静态代理模式*/ WasProxy_interface wasProxy_interface = new MyFriends (); Repairman repairman = new Repairman(wasProxy_interface); repairman.buy1(); repairman.buy2(); repairman.buy3(); repairman.buy4();
Log
动态代理模式
使用动态代理模式还需要定义一个类实现InvocationHandler
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * Created by Administrator on 2017/2/17 0017. * @param 处理器类 */public class DynamicConditionProxy implements InvocationHandler { /** * 声明一个Object作为被代理类 * */ private Object object; /** * 将需要代理的实例通过 处理器类 的构造方法传递给代理。 */ public DynamicConditionProxy(Object object){ this.object=object; } @Override public Object invoke(Object obj, Method method, Object[] objects) throws Throwable { /** * method.invoke(object, objects); * 第一个参数 :被代理类 * 第二个参数:被代理的方法 * */ Object invoke = method.invoke(object, objects); return invoke; }}
- 调用
/** * 动态代理模式 * */WasProxy_interface wasProxy_interface = new MyFriends ();InvocationHandler ihandler = new DynamicConditionProxy(wasProxy_interface);//获取真实主题类的ClassLoaderClassLoader classLoader = wasProxy_interface.getClass().getClassLoader();//动态产生一个代理者。 Class<?>[] cls = new Class[]{WasProxy_interface.class}; WasProxy_interface wProxy = (WasProxy_interface) Proxy.newProxyInstance(classLoader, cls, ihandler); wProxy.buy1(); wProxy.buy2(); wProxy.buy3(); wProxy.buy4();
动态代理log
这些就是对代理的介绍,其实在android源码中也用到了很多代理模式,有兴趣的朋友可以去看下!
最后奉上demo:http://download.csdn.net/detail/qq_34501274/9758145
本人描述能力有限!欢迎指出不足之处!
0 0
- java设计模式___Proxy代理模式
- java设计模式-代理模式
- Java设计模式-----代理模式
- java设计模式-代理模式
- java设计模式---代理模式
- java设计模式---代理模式
- java设计模式---代理模式
- Java设计模式-代理模式
- Java 设计模式 代理模式
- Java设计模式-代理模式
- java设计模式-代理模式
- Java设计模式:代理模式
- java设计模式-----代理模式
- java 设计模式-代理模式
- java设计模式:代理模式
- java设计模式---代理模式
- java设计模式--代理模式
- java设计模式--代理模式
- sphinx-主索引增量索引和实时索引
- /usr/bin/ld: error: cannot find -lGL
- vue.js高仿饿了吗外卖App
- 接口性能测试(Jmeter)操作总结
- Mybatis自动生成代码
- java设计模式___Proxy代理模式
- 构建linux根文件系统笔记
- mybatis中#和$区别
- Python中引用自定义模块
- C++变量类型
- hdu 1754 I Hate It 【线段树】
- 利用Class反射获取方法
- HTTPS协议原理透析
- 华为OJ:句子逆序