2017.4.5 策略设计模式

应用背景:

int main(int argc, const char * argv[]) {
    MYStrategyPattern *sp = [MYStrategyPattern new];
    [sp testAction];
    return 0;
}

这是一个普通的函数调用,需要用sp调用testAction方法,而当有一天我业务不满足的时候,我要么会改这个方法要么是添加新的方法,供sp实例去调用,形成如下状况:

int main(int argc, const char * argv[]) {
    MYStrategyPattern *sp = [MYStrategyPattern new];
    [sp testAction1];
    [sp testAction2];
    return 0;
}

总之是需要更改MYStrategyPattern这个类中的代码,但是为了灵活,我能不能达到上述目的而不更改MYStrategyPattern类中代码呢,就是这个场景 出现了策略 这个设计模式。
具体实现如下:

@protocol Action <NSObject>
- (void)action;
@end

@interface MYStrategyPattern : NSObject
@property (nonatomic, strong) id<Action> action;
- (void)testAction;
@end
@implementation MYStrategyPattern
- (instancetype)init {
    self = [super init];
    if (self) {
        _action = [SpecificAction new];
    }
    return self;
}
- (void)testAction {
    [_action action];
}
@end

@interface SpecificAction : NSObject <Action>
@end
@implementation SpecificAction
- (void)action {
    NSLog(@"具体行为1");
}
@end

@interface SpecificAction1 : NSObject <Action>
@end
@implementation SpecificAction1
- (void)action {
    NSLog(@"具体行为2");
}
@end

int main(int argc, const char * argv[]) {
    MYStrategyPattern *sp = [MYStrategyPattern new];
    [sp testAction];   //具体行为1
    
    SpecificAction1 *a1 = [SpecificAction1 new];
    sp.action = a1;
    [sp testAction];    //具体行为2
    
    SpecificAction *a2 = [SpecificAction new];
    sp.action = a2;
    [sp testAction];  //具体行为1
    return 0;
}

如上,将行为抽象成一个接口,在具体使用的时候找到对应的行为实现类,赋值后再进行调用,这样我们保证了即使具体策略的更改,却不会影响MYStrategyPattern类,保证了灵活性,这个就是策略设计模式的好处。
目前对设计模式的理解停留在 这些都是套路,利用这些套路可以在未来 即使业务会发生改变的情况下,尽可能的少改代码 或者说 对原有的代码改动小

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,118评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,943评论 2 17
  • 起重机通过起升和移动所吊运的物品完成搬运作业,为适应起重机不同的使用情况和工作要求,在设计和选用起重机及其零部件时...
    起重工厂店阅读 832评论 0 0