我眼中的代理模式
来源:互联网 发布:手机联机软件 编辑:程序博客网 时间:2024/05/22 15:34
什么时候需要用到代理模式
不希望与真实的对象进行交互,或者需要做一些额外的控制。因为是代理的关系,所以与代理对象交互的时候,就像与真实的对象交互一样。只是中间的代理类会做一些额外的操作。现有的代理模式中有静态代理和动态代理两种,静态代理就是在编译的时候代理的关系就已经确定了,而动态的代理是在运行的时候才有的代理关系。
先看静态代理
静态代理类图
类图主要反应两点
1.代理类和被代理类对外界是无法区分的,好像是一样的。这样代理类和被代理类就继承与一个接口
2.代理类是对真实的类加了一层,这就需要代理类持有被代理类。代理类组合被代理类
代码
//公共接口public interface Print { public void print(String str);}//真实的类public class RealPrint implements Print{ @Override public void print(String str) { // TODO Auto-generated method stub Log.d(str); }}
静态代理 代码
public class ProxyPrint implements Print { private RealPrint mMyprint; public ProxyPrint(RealPrint myPrint){ mMyprint = myPrint; } @Override public void print(String str) { // TODO Auto-generated method stub Log.d("静态代理前 str : "+str); //在这里可以做很多操作:比如对传递的数据进行检验,加工处理,这里模拟字符串变小写 str = str.toLowerCase(); mMyprint.print(str); }}
动态代理 代码
动态代理的类图就略过了,没啥好看的,其本质就是反射的方式取调用,在调用之前可以允许你做一些额外的事情。动态代理的好处是,在运行时代理,代理一堆的同一个接口的类,也只需要一个代理类,少了手动创建代理的过程。直接上代码
public class DynamicProxyHandler implements InvocationHandler{ private Print mRealPrint; public DynamicProxyHandler(Print realPrint) { mRealPrint = realPrint; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub beforeOperation(); method.invoke(mRealPrint, args); return null; } private void beforeOperation() { Log.d("\n我是动态代理前面的操作"); }}
为了更好的查看,以代码的方式进行了记录.详情请查看DesignPattern中的 com.arron.pattern.proxy下的内容.戳我查看详情
阅读全文
0 0
- 我眼中的代理模式
- 我眼中的MVC模式
- 我眼中的策略模式
- 我眼中的设计模式
- 我眼中的MVC模式
- 我眼中的命令模式
- 我眼中的观察者模式
- 我眼中的设计模式-适配器模式
- 我眼中的设计模式 ----策略模式
- 我眼中的设计模式(一)
- 我眼中的设计模式(二)
- 我眼中的设计模式(三)
- 我眼中的设计模式(2)
- 我眼中的设计模式(3)
- 我眼中的设计模式(4)
- 我眼中的设计模式(5)
- 我眼中的设计模式(6)
- 我眼中的设计模式(7)
- 总结按位操作符(按位与&、按位或|、按位异或^)以及sizeof操作符
- OpenCV3_C++_ImageShow()显示图片 实例
- 学习归并排序
- Android项目依赖
- A/B(HDU1576)
- 我眼中的代理模式
- Python玩转微信 个性签名生成词云图
- glRasterPos2f函数介绍
- 个人总结操作符的特性,包括:按位操作符、位移操作符和单目操作符中的sizeof
- POJ-3278 Catch That Cow【广度优先搜索】
- 【机器学习算法】从决策树到GBDT(一)
- Linux 安装VMware-Tools
- 访问矩阵中的数据的两种方法
- 自定义RecyclerView之点击事件