ary*_*axt 4 delegates objective-c strategy-pattern
我理解"战略模式"的概念,但我仍然有点困惑.
我们有一个名为的班级Dog.
Dog有MovementBehaviour(接口)可以MovementBehaviourNormal和MovementBehaviourFast.
MovementBehaviourNormal并且MovementBehaviourFast都包含一个名为的方法move.
问题:从move方法中访问dog属性的最佳方法是什么?将狗对象传递MovementBehaviour给委托是不是一个坏主意?
通常,您不应直接从策略对象访问Dog上的属性.相反,您可以做的是提供一种基于旧位置返回新位置的移动方法.所以,例如,如果你有:
@interface Dog : NSObject {
NSInteger position;
DogStrategy * strategy;
}
@property(nonatomic, assign) NSInteger position;
@property(nonatomic, retain) DogStrategy * strategy;
- (void)updatePosition;
@end
@implementation Dog
@synthesize position, strategy;
- (void)updatePosition {
self.position = [self.strategy getNewPositionFromPosition:self.position];
}
@endRun Code Online (Sandbox Code Playgroud)
@interface DogStrategy : NSObject { }
- (NSInteger)getNewPositionFromPosition:(NSInteger)pos;
@end
// some parts elided for brevity
@interface NormalDogStrategy : DogStrategy { }
@end
@implementation NormalDogStrategy
- (NSInteger)getNewPositionFromPosition:(NSInteger)pos {
return pos + 2;
}
@endRun Code Online (Sandbox Code Playgroud)
然后,当您实例化Dog时,您可以为其分配NormalDogStrategy并调用[dog updatePosition]- Dog将询问其策略的更新位置,并将其分配给其实例变量本身.你已经避免将Dog的内部暴露给你的DogStrategy并且仍然完成了你的预期.
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |