java设计模式___Proxy代理模式
2017-02-19 20:40
741 查看
简述
二月十四号情人节日,在这一天真是吃了大把大把的狗粮啊!我朋友想给他女朋友买了个苹果7作为情人节礼物,可是手里钱不够怎么办呢,恰好我手里有一些闲钱,于是我就代他先买个苹果7,这一波狗粮吃的十分过瘾啊!其实这就是一种代理。下面用代码详细说明一下:
公共接口的设计(买苹果7)
被代理类(我朋友)
需要实现公共接口
代理类(我)
需要实现公共接口
调用
Log
动态代理模式
使用动态代理模式还需要定义一个类实现InvocationHandler
调用
动态代理log
这些就是对代理的介绍,其实在android源码中也用到了很多代理模式,有兴趣的朋友可以去看下!
最后奉上demo:http://download.csdn.net/detail/qq_34501274/9758145
本人描述能力有限!欢迎指出不足之处!
二月十四号情人节日,在这一天真是吃了大把大把的狗粮啊!我朋友想给他女朋友买了个苹果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); //获取真实主题类的ClassLoader ClassLoader 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
本人描述能力有限!欢迎指出不足之处!
相关文章推荐
- java设计模式之代理模式(Proxy)
- java设计模式之代理模式Proxy
- java设计模式8——代理模式(Proxy)
- 设计模式(十二)----- 代理模式(Proxy)----(JAVA版)
- Java设计模式之从[游戏场景读取]分析代理(Proxy)模式
- Java设计模式:Proxy(代理)
- java设计模式——代理模式(proxy)
- Java开发中的23种设计模式之八:代理模式(Proxy)
- Java设计模式Proxy之动态代理
- Java设计模式Proxy之动态代理
- java设计模式之Proxy(代理)
- Java设计模式-----Proxy模式(动态代理)
- java 设计模式学习笔记六 proxy代理模式
- Java设计模式Proxy之动态代理
- JAVA 设计模式 代理Proxy模式 一
- java设计模式之——Proxy:代理模式
- java 设计模式学习笔记六 proxy代理模式
- Java设计模式Proxy之动态代理
- Java设计模式之代理模式(Proxy)
- Java设计模式:Proxy(代理)