美文网首页
iOS设计模式-策略模式

iOS设计模式-策略模式

作者: 渡口丶 | 来源:发表于2019-10-25 15:11 被阅读0次

    一、定义

    策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

    二、适用场景

    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];
    

    实现了角色(用户)和武器(算法)的相互独立,更改或添加武器(算法),也不会影响到角色(用户)

    Demo地址

    相关文章

      网友评论

          本文标题:iOS设计模式-策略模式

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