美文网首页
策略模式

策略模式

作者: 一毛钱 | 来源:发表于2019-03-31 22:26 被阅读0次

    策略模式 定义

    通过让一组算法对象,遵循一个定义明确的协议的方式,使得我们可以在不修改原有类的情况下扩展其功能。如果需要向第三方开发者提供开发框架,且框架中关键的几个类发生任意变化时,都需要进行广泛、高成本的测试和验证流程的话,那么使用策略模式会让人受用无穷。
    第一点:定义了一系列算法
    第二点:每一个算法单独封装
    第三点:每一个算法都是可以相互替换
    第四点:客户端可以独立变化算法(客户端:调用者)

    策略模式-应用场景

    第一点:针对同一类型的问题多种处理方式,仅仅只是具体的行为有差别
    第二点:需要安全的封装同一类型的操作
    第三点:出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类的时候

    策略模式-角色划分

    3个角色(核心角色:策略接口、具体策略)
    角色一:策略接口
    角色二:具体策略
    角色三:策略上下文(管理器)-> 忽略->工厂(不一样)

    具体案例:

    加密算法->用策略模式
    AES加密算法
    DES加密算法
    自定义加密算法

    //角色一:策略接口
    @protocol IEncryption <NSObject>
    //加密
    -(NSString*)encrypt:(NSString*)data key:(NSString*)key iv:(NSData*)iv;
    //解密
    -(NSString*)decrypt:(NSString*)data key:(NSString*)key iv:(NSData*)iv;
    @end
    
    
    //角色二: 具体策略  RSA加密 
    @interface RSAEncryption : NSObject<IEncryption>
    
    @end
    
    -(NSString*)encrypt:(NSString*)data key:(NSString*)key iv:(NSData*)iv{
        return nil;
    }
    
    -(NSString*)decrypt:(NSString*)data key:(NSString*)key iv:(NSData*)iv{
        return nil;
    }
    
    //具体策略: DES加密 
    @interface DESEncryption : NSObject<IEncryption>
    
    @end
    
    -(NSString*)encrypt:(NSString*)data key:(NSString*)key iv:(NSData*)iv{
        return nil;
    }
    
    -(NSString*)decrypt:(NSString*)data key:(NSString*)key iv:(NSData*)iv{
        return nil;
    }
    
    // 外部调用
      id<IEncryption> encryption = [[RSAEncryption alloc] init];
            //基础知识
            [encryption encrypt:<#(NSString *)#> key:<#(NSString *)#> iv:<#(NSData *)#>];
            [encryption decrypt:<#(NSString *)#> key:<#(NSString *)#> iv:<#(NSData *)#>];
    

    Cocoa框架中的使用

    1、使用协议来定义生成tableView单元格的策略。UITableView依赖一个遵循tableviewDatasource 协议的类,去实现相关策略,并提供数据。在这种情况下,第三方开发者,在不修改或者继承UITableView类的情况下,修改或者继承UITableView类的行为。

    2、基于选择器的策略。

    相关文章

      网友评论

          本文标题:策略模式

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