策略模式

策略模式 定义

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

策略模式-应用场景

第一点:针对同一类型的问题多种处理方式,仅仅只是具体的行为有差别
第二点:需要安全的封装同一类型的操作
第三点:出现同一抽象类有多个子类,而又需要使用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、基于选择器的策略。

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

推荐阅读更多精彩内容

  • 二十三种设计模式 - 策略模式 策略模式简介 模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个...
    JustTheSame阅读 1,849评论 2 16
  • 【学习难度:★☆☆☆☆,使用频率:★★★★☆】直接出处:策略模式梳理和学习:https://github.com/...
    BruceOuyang阅读 1,526评论 3 5
  • 目录 本文的结构如下: 引言 什么是策略模式 模式的结构 典型代码 代码示例 策略模式和模板方法模式的区别 优点和...
    w1992wishes阅读 898评论 1 7
  • 1.初识策略模式 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户...
    王侦阅读 1,493评论 0 3
  • 设计模式 1 什么是策略模式 在策略模式中,定义了一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里...
    凯玲之恋阅读 1,148评论 0 3