策略模式
策略模式 定义
通过让一组算法对象,遵循一个定义明确的协议的方式,使得我们可以在不修改原有类的情况下扩展其功能。如果需要向第三方开发者提供开发框架,且框架中关键的几个类发生任意变化时,都需要进行广泛、高成本的测试和验证流程的话,那么使用策略模式会让人受用无穷。
第一点:定义了一系列算法
第二点:每一个算法单独封装
第三点:每一个算法都是可以相互替换
第四点:客户端可以独立变化算法(客户端:调用者)
策略模式-应用场景
【策略模式】第一点:针对同一类型的问题多种处理方式,仅仅只是具体的行为有差别
第二点:需要安全的封装同一类型的操作
第三点:出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类的时候
策略模式-角色划分
3个角色(核心角色:策略接口、具体策略)
角色一:策略接口
角色二:具体策略
角色三:策略上下文(管理器)-> 忽略->工厂(不一样)
具体案例:
加密算法->用策略模式
AES加密算法
DES加密算法
自定义加密算法
//角色一:策略接口
@protocol IEncryption
//加密
-(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@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@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 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、基于选择器的策略。
推荐阅读
- 硬笔楷书26
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 设计模式-代理模式-Proxy
- 【译】Rails|【译】Rails 5.0正式发布(Action Cable,API模式等)
- java静态代理模式
- VueX(Vuex|VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
- Kotlin基础(10)-代理模式在kotlin中的使用
- 长谈的确是这个时代需要的一种模式
- 《读_Head_First_有感》_“命令模式”
- 《教育心理学》读书笔记十四---学校班级管理的现状分析与策略研究