一、定义
策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
二、适用场景
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。---百度百科
三、具体实现
例:有一个动作冒险游戏,每个角色只能使用一种武器,但是可以在游戏过程中更换武器。
1.将武器抽象为一个行为接口WeaponBehavior
@protocol WeaponBehavior <NSObject>
@required
- (void)userWean;
@end
2.设计角色的抽象类,将fight方法委托给行为类执行
// Character.h
@interface Character : NSObject
@property (nonatomic, strong) id<WeaponBehavior> weaPonVegavior;
- (void)fight;
@end
// Character.m
- (void)fight
{
[self.weaPonVegavior userWean];
}
3.继承抽象类创建角色类,这里创建了个King类
@interface King : Character
@end
4.创建具体的行为类(各类武器),实现行为接口
// AxeBehavior.h
@interface AxeBehavior : NSObject<WeaponBehavior>
@end
// AxeBehavior.m
@implementation AxeBehavior
- (void)userWean
{
NSLog(@"用斧子劈砍");
}
@end
5.实现更换武器
Character *king = [[King alloc] init];
[king setWeaPonVegavior:[SwordBehavior new]];
// [king setWeaPonVegavior:[KnifeBehavior new]];
// [king setWeaPonVegavior:[AxeBehavior new]];
[king fight];
实现了角色(用户)和武器(算法)的相互独立,更改或添加武器(算法),也不会影响到角色(用户)
网友评论