我是Objective-C的新手,但对Java很有经验。Java中是否有Objective-C“委托”的等价概念,以便我能更好地理解这个概念?有没有办法在Java中模仿委托的概念?
发布于 2009-01-14 21:13:13
委托只是一种方法,可以避免像表视图这样的对象子类化来实现特定于应用程序的行为,而是将责任放在控制器上。当您创建表视图时,您为其分配了一个控制器对象,该对象实现了一组已定义的方法(有些可能是必需的,有些可能是可选的)。
发布于 2010-10-21 06:57:14
下面是一种考虑委托的方法--在OOP的典型例子中,我有一个汽车对象。我不想再子类化它,我只想按原样使用它,那么我如何让它表现得像雪佛兰或野马呢?我给它一个委托。
我的车会有驾驶的方法,按喇叭的方法等等。
我的代理会有像“我的最高速度是多少”、“喇叭听起来像什么”和“我的窗口是有色的吗”这样的方法。
因此,当我在我的汽车对象上调用-drive (它没有子类)时,该方法调用我的委托的topSpeed方法,委托告诉它120英里每小时,这样汽车就知道它应该多快,而不必是一辆野马。
在目标C中,通常有一个协议来定义一个委托应该响应什么,例如,对于我的汽车对象的委托,会有一个如下声明的协议:
@protocol carDelegate
-(int)carTopSpeed;
-(UIColor*)carColor;
-(BodyShape*)carBodyShape;
-(DragCoefficient*)carDragCoefficient;
-(HoodOrnament*)carHoodOrnament
@optional
-(BOOL)windowsTinted;
@end然后,您可以创建符合此协议的自己的对象(实现所有必需的方法,以及所需的任何可选方法)
并且car对象期望将一个(id)作为委托传递给它。
那么car对象已经设法避免了子类化,并且仍然可以根据用户的需要进行操作。
发布于 2009-01-14 21:18:22
java.lang.reflect.Proxy是java中最接近的等价物。不过,使用起来很乏味。
https://stackoverflow.com/questions/444558
复制相似问题