美文网首页
2017.4.5 策略设计模式

2017.4.5 策略设计模式

作者: 敲一手烂代码 | 来源:发表于2017-04-05 23:36 被阅读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类,保证了灵活性,这个就是策略设计模式的好处。
    目前对设计模式的理解停留在 这些都是套路,利用这些套路可以在未来 即使业务会发生改变的情况下,尽可能的少改代码 或者说 对原有的代码改动小

    相关文章

      网友评论

          本文标题:2017.4.5 策略设计模式

          本文链接:https://www.haomeiwen.com/subject/rjcfattx.html