Object-c和Java中的代理
代理模式的核心思想就是一个类想做一件事情(函数),但它不去亲自做(实现),而是通过委托别的类(代理类)来完成。
代理模式的优点:
1.可以实现传值,尤其是当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时。(这点在ios里面应用颇多)
2.实现了代码的解耦。可以对外提供接口,具体的工作由不同的客户来决定怎么做。
代理模式在java和ios编程中经常使用,下面分别二者进行说明。
IOS的代理模式,分两步:
1.在委托类A声明一个代理和一个协议,协议里有个方法的声明(由代理来实现)。这样这个类就可以在自己内部调用[mDelegate dosomething:(param) p]来实现要做的东西。
@protocal MyDelegate
-(void)dosomething:(param)p;
@end
@interface MyClass ::NSObject
@property(strong, nanotomic) (id)MyDelegate mDelegate;
......
[mDelegate dosomething:(param)p //调用代理做事情
2.设置代理,在代理类里,首先声明自己是A类的代理,即在interface后面加上<代理协议>。然后设置A的代理为自己:mA.mDelegate=self。然后去实现协议方法dosomething(param p)。
@interface Proxy::NSObject<MyDelegate>
(MyClass) mA;
@end
@implementation
mA.mDelegate=self;
.....@end
Java的代理模式
思路跟IOS的相似,据说代理模式有很多种,这里写了个我理解的代理模式的例子:有三个关键角色:委托类:Request,代理类:Proxy,接口MyInterface
接口:里面有一个方法,处理数据Process()
public Interface MyInterface{
int Process(int a);
}
委托类:
1 public class Request{
2
3 int data=1;
4 Proxy mProxy;
5
6 public Request(Proxy p){
7 this.mProxy=p; //通过构造函数传入代理p
8
9 }
10
11 public int ProcessData(){
12 return mProxy.Process(data); //在这里调用代理来做Process这个事情
13 }
14
15 public static void Main(string args[]){
16 //实例化代理类和委托类
17 Proxy mProxy=new Proxy();
18 Request mRequest=new Request(mProxy);
19 //输出协议方法的结果
20 int result=mRequest.ProcessData();
21 System.out.println(result);
22 }
23
24 }
代理类:
public Class Proxy implements MyInterface{
....
public int Process(int a){
return 10*a; //实现协议方法
}
}
这样Proxy就替Request完成了ProcessData的任务,这里面代理类相当于客户,不同的客户可以有不同的处理a的方法。这里的代理是对a乘以了10.
这里Process()就是服务端给客户端提供的接口,即把数据a暴露出来,由客户来决定怎么对a进行处理。
最后打印的结果为10
理解代理模式的关键:
1.从委托类角度上考虑:
委托类为什么要让别的类来代替自己做这件事?因为委托类有个东西需要别人做,但是不知道具体给谁做(有很多客户),所以干脆把这个接口扔出去,谁用的时候自己实现该方法就行了。
2.从代理类角度考虑:
虽然委托类“委托别人做事”,真正将客户提出的功能进行了落实的是委托类。客户既然成为客户,他是有需求的,需求是什么?就是协议方法的实现。客户的需求通过代理模式传入到委托类这里,从而实现客户的要求。
形象的说:委托类要做一件很厉害的事情,但是其中有一小部分需要根据不同的客户来填写响应的需求,这个需求就是对代理类(客户)暴露的接口,客户实现了这个接口以后委托类就可以把这个很厉害的事情做完了,最终得到客户想要的结果。
Object-c和Java中的代理的更多相关文章
- java中Proxy(代理与动态代理)
转自: https://blog.csdn.net/pangqiandou/article/details/52964066 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习 ...
- (转)轻松学,Java 中的代理模式及动态代理
背景:讲到反射机制,肯定会想到动态代理. 轻松学,Java 中的代理模式及动态代理 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强.值得注意的是,代理类和被代理类应该 ...
- java中动态代理的实现
动态代理的实现 使用的模式:代理模式. 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.类似租房的中介. 两种动态代理: (1)jdk动态代理,jdk动态代理是由Java内部的反射机制 ...
- java中动态代理实现机制
前言: 代理模式是常用的java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系 ...
- Java中的代理模式
代理模式在Java Web的框架中经常使用到.比如说在对数据库的访问中,核心功能是对数据库的增删改查,而连接数据库.处理事务等功能我们在开发中也要考虑到.所以我们将数据库的CRUD抽象到接口中,然后实 ...
- java中静态代理,动态代理知识的补充
文章转载自:http://blog.csdn.net/jialinqiang/article/details/8950989 一.Java动态代理 相对于静态代理的代理类在编译时生成(.class文件 ...
- java中静态代理跟动态代理之间的区别
文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...
- java中动态代理
一.在java中怎样实现动态代理 1.我们要有一个接口,还要有一个接口的实现类,而这个实现类呢就是我们要代理的对象 接口: package org.dynamicproxy.test; public ...
- JAVA中的代理技术(静态代理和动态代理)
最近看书,有两个地方提到了动态代理,一是在Head First中的代理模式,二是Spring AOP中的AOP.所以有必要补充一下动态代理的相关知识. Spring采用JDK动态代理和CGLib动态代 ...
- 深入理解JAVA中的代理模式
前言 代理是什么 事故现场:我家的宠物今天生病了,而我又没有相关的医学知识,所以我只让我的宠物多喝热水吗? 结果显然是不行的,所以我需要去找宠物医生这些更专业的人来帮我的宠物治病. 这个时候,代理就出 ...
随机推荐
- [hadoop]mapreduce原理简述
1.用于map的输入,先将输入数据切分成相等的分片,为每一个分片创建一个map worker,这里的切片大小不是随意订的,一般是与HDFS块大小一致,默认是64MB,一个节点上存储输入数据切片的最大s ...
- 20145202马超 2016-2017-2 《Java程序设计》第5周学习总结
20145202马超 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 异常:程序在运行的时候出现不正正常的情况 由来:问题也是可以通过java对不正常情况进行 ...
- CentOS 6 / RHEL 6配置bonding 4模式
实现bond 802.3ad or 4 模式:(IEEE 802.3ad), 方式:创建一个整合的组,这个组会共享网速和网络双工(duplex)设置.模式 4 会根据 IEEE 802.3ad 标准使 ...
- HDU 1073 Online Judge (字符串处理)
题目链接 Problem Description Ignatius is building an Online Judge, now he has worked out all the problem ...
- 关于在函数中使用Array.prototype.slice.call而不是直接用slice
arguments是每个函数在运行的时候自动获得的一个近似数组的对象(除了length外没有其他属性),这个arguments对象其实并不是Array,所以没有slice方法. Array.proto ...
- 【划水闲谈】Terraria 1.3.5更新
我知道这本应是一个算法博客,但又有谁规定了不能发点其他内容呢? Terraria,一个有趣的沙盒游戏.在这里,你可以建造,挖掘,开始一次又一次新的冒险. 4月19日,Re-Logic承诺的官方中文版终 ...
- .net 运行中出现的错误解决方法记录
1.应用程序无法启动,因为应用程序的并行配置不正确.有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具. https://jingyan.baidu.com/article ...
- HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]&l ...
- 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider
数据源组件ContentProvider与其他组件不同,数据源组件并不包括特定的功能逻辑.它只是负责为应用提供数据访问的接口.Android内置的许多数据都是使用ContentProvider形式,供 ...
- xgboost gbdt特征点分烈点
lightGBM与XGBoost的区别:(来源于:http://baijiahao.baidu.com/s?id=1588002707760744935&wfr=spider&for= ...