【发布时间】:2010-10-01 11:14:14
【问题描述】:
我对 Objective-C 比较陌生,但在 Java 方面经验丰富。 Java中是否有Objective-C“委托”的等效概念,以便我可以更好地理解这个概念?有没有办法在 Java 中模拟委托概念?
【问题讨论】:
标签: java objective-c delegation
我对 Objective-C 比较陌生,但在 Java 方面经验丰富。 Java中是否有Objective-C“委托”的等效概念,以便我可以更好地理解这个概念?有没有办法在 Java 中模拟委托概念?
【问题讨论】:
标签: java objective-c delegation
委托只是一种避免将对象(如表视图)子类化以实现应用程序特定行为的方法,而是将责任交给控制器。当您创建表视图时,您为其分配一个控制器对象,该对象实现一组定义的方法(一些可能是必需的,其他可能是可选的)。当 table view 需要数据或必须决定如何显示自己时,它会询问委托是否实现了适当的方法,如果实现则调用它来做出决定。
【讨论】:
这是一种考虑委托的方式 - 在 OOP 典型示例中,我有一个汽车对象。我不想再继承它,我只想按原样使用它,那么我如何让它像雪佛兰或野马一样?我给它一个委托。
我的车会有驾驶方法、鸣喇叭等方法。
我的代表会使用诸如“我的最高速度是多少”和“喇叭听起来像什么”和“我的窗户有颜色”这样的方法
所以当我在我的汽车对象(不是子类)上调用 -drive 时,该方法调用我的委托的 topSpeed 方法,委托告诉它 120mph,所以汽车知道它应该开多快,而不必是野马。
在 Objective C 中,通常有一个协议定义委托应响应的内容,即对于我的汽车对象的委托,将有一个像这样声明的协议:
@protocol carDelegate
-(int)carTopSpeed;
-(UIColor*)carColor;
-(BodyShape*)carBodyShape;
-(DragCoefficient*)carDragCoefficient;
-(HoodOrnament*)carHoodOrnament
@optional
-(BOOL)windowsTinted;
@end
然后您可以制作符合此协议的自己的对象(实现所有必需的方法,以及任何被视为需要的可选方法)
汽车对象会期望一个 (id) 作为委托传递给它。
那么汽车对象已经设法避免被子类化,并且仍然可以根据用户的需要进行操作。
【讨论】:
java.lang.reflect.Proxy 是 java 中最接近的等价物。虽然使用起来很乏味。
【讨论】:
委托是一种面向对象的设计模式。 Wikipedia 上有一个 Java 示例:Delegation Pattern
【讨论】: