首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Java程序员解释Objective-C委托

向Java程序员解释Objective-C委托
EN

Stack Overflow用户
提问于 2009-01-14 20:35:28
回答 4查看 2.6K关注 0票数 9

我是Objective-C的新手,但对Java很有经验。Java中是否有Objective-C“委托”的等价概念,以便我能更好地理解这个概念?有没有办法在Java中模仿委托的概念?

EN

回答 4

Stack Overflow用户

发布于 2009-01-14 21:13:13

委托只是一种方法,可以避免像表视图这样的对象子类化来实现特定于应用程序的行为,而是将责任放在控制器上。当您创建表视图时,您为其分配了一个控制器对象,该对象实现了一组已定义的方法(有些可能是必需的,有些可能是可选的)。

票数 9
EN

Stack Overflow用户

发布于 2010-10-21 06:57:14

下面是一种考虑委托的方法--在OOP的典型例子中,我有一个汽车对象。我不想再子类化它,我只想按原样使用它,那么我如何让它表现得像雪佛兰或野马呢?我给它一个委托。

我的车会有驾驶的方法,按喇叭的方法等等。

我的代理会有像“我的最高速度是多少”、“喇叭听起来像什么”和“我的窗口是有色的吗”这样的方法。

因此,当我在我的汽车对象上调用-drive (它没有子类)时,该方法调用我的委托的topSpeed方法,委托告诉它120英里每小时,这样汽车就知道它应该多快,而不必是一辆野马。

在目标C中,通常有一个协议来定义一个委托应该响应什么,例如,对于我的汽车对象的委托,会有一个如下声明的协议:

代码语言:javascript
复制
 @protocol carDelegate

 -(int)carTopSpeed;
 -(UIColor*)carColor;
 -(BodyShape*)carBodyShape;
 -(DragCoefficient*)carDragCoefficient;
 -(HoodOrnament*)carHoodOrnament     

 @optional
 -(BOOL)windowsTinted;

 @end

然后,您可以创建符合此协议的自己的对象(实现所有必需的方法,以及所需的任何可选方法)

并且car对象期望将一个(id)作为委托传递给它。

那么car对象已经设法避免了子类化,并且仍然可以根据用户的需要进行操作。

票数 4
EN

Stack Overflow用户

发布于 2009-01-14 21:18:22

java.lang.reflect.Proxy是java中最接近的等价物。不过,使用起来很乏味。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/444558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档