策略(Strategy)模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。看到策略模式的时候有的时候跟简单工厂相比较,其实有很大的迷惑性,都是继承多态感觉没有太大的差异性,简单工厂模式是对对象的管理,策略模式是对行为的封装。可以先简单的看一下结构图:

之前简单工厂是通过银行卡作为例子的简单工厂将不同的银行卡抽象出来,如果在策略模式中我们可以将每张银行卡的购物,吃饭,住房。。作为一个简单的消费策略抽象出来,也可以以操作系统类比,Windows,OS X,Linux可以作为简单的对象抽象,系统中都是有默认软件的,我们不需要管软件的安装,如果没有软件的话我们就需要自己下载,可以将软件的安装作为一个策略封装起来。

Strategy的抽象类:

@interface SoftWareStrategy : NSObject-(void)installStrategy;@end

继承Strategy的Xcode的策略类:

@implementation XcodeStrategy-(void)installStrategy{NSLog(@"Xcode安装成功");
}@end

继承Strategy的QQ的策略类:

@implementation QQStrategy-(void)installStrategy{NSLog(@"QQ安装成功");NSLog(@"原文地址:http://www.cnblogs.com/xiaofeixiang");
}@end

Context类:

typedef NS_OPTIONS(NSInteger, StrategyType){StrategyXcode,strategyQQ
};@interface SoftWareContext : NSObject-(instancetype)initWithStrategyType:(StrategyType)strategyType;-(void)installResult;@end

Context的实现:

@interface  SoftWareContext()@property  (strong,nonatomic) SoftWareStrategy *strategy;@end
@implementation SoftWareContext-(instancetype)initWithStrategyType:(StrategyType)strategyType{self=[super init];if (self) {switch (strategyType) {case StrategyXcode:self.strategy=[[XcodeStrategy alloc]init];break;case strategyQQ:self.strategy=[[QQStrategy alloc]init];break;}}return self;
}-(void)installResult{[self.strategy installStrategy];
}@end

最终调用:

    SoftWareContext  *context=[[SoftWareContext alloc]initWithStrategyType:StrategyXcode];[context installResult];

这里有三个概念再看一下应该就清晰多了:

环境(Context)角色:持有一个Strategy的引用;

抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口;

具体策略(ConcreteStrategy)角色:包装了相关的算法或行为;

iOS开发-策略模式相关推荐

  1. iOS开发夜间模式的设置(主题切换)

    iOS开发夜间模式的设置(主题切换) 很长一段时间没有写博客了.想到自己最近刚好做了不少重构,刚好可以总结一下. 夜间模式,很多阅读类的或资讯类的App都会这个功能.以前自己也做过,现在把它抽出来封装 ...

  2. iOS开发-模板方法模式

    模板方法模式定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤.模板方法模式是由子类决定实现算法中的步骤,工厂方法由子类决定实现哪一 ...

  3. IOS中策略模式初运用

    前段时间项目中涉及到输入验证比较多,有简单的是否为纯数字输入的验证,是否为纯字母输入的验证,也有复杂的正则检查验证. 偶尔翻阅去年买的一本设计模式的书,看到了一种设计模式:策略模式. 运用策略模式,把 ...

  4. iOS模式分析 策略模式

    好久了,过去了一个月没有动笔写东西了,除了工作的忙,还有最近在学习一个课程和看一些技术类的书籍,腾不出时间来写博客了,说了这么多,其实归根结底都是我懒的借口,确实挺惭愧,还是得继续加油,多写多练习,做 ...

  5. iOS开发 黑暗模式

    iOS 13终于引来了暗黑模式. 每当新特性的到来,iOS开发者们既紧张又有点小兴奋,怀揣着被虐的心态,让我们来看看暗黑模式到底是个啥. 虽然这是一个设计驱动的需求,但是本着一颗虔诚(暴躁)的心,我们 ...

  6. [iOS开发]工厂模式

    工厂模式是创建型模式,它的作用是创建对象.具体来说,常见的工厂模式包括简单工厂模式,工厂方法模式和抽象工厂模式三种. 简单工厂模式(Simple Factory Pattern) 构成 工厂类 工厂类 ...

  7. 策略模式(Header-First笔记)

    个人网站www.itiask.com  专业问答网站,基于我记录框架开发 策略模式和设计原则(主要是自己的笔记:水平较低,请勿语言攻击) 如果想理解的深入建议深入的读读headfirst,这个真有用, ...

  8. iOS开发一路走来看到,好奇,好玩,学习的知识点记录

    AutoreleasePool http://blog.sunnyxx.com/2014/10/15/behind-autorelease/ http://blog.leichunfeng.com/b ...

  9. iOS 开发中的 Flux 架构模式

    本文讲的是iOS 开发中的 Flux 架构模式, 在半年前,我开始在 PlanGrid iOS 应用程序中采用 Flux 架构(开发).这篇文章将会讨论我们从传统的 MVC 转换到Flux的动机,同时 ...

最新文章

  1. python应用实例论文_番外篇——Python多进程应用实例一则
  2. UCL葡萄酒(red white wine quality)数据集字段解释、数据导入实战
  3. 微信公众平台关于fakeid和openid的解析
  4. SAP在物流工作中的应用之学习笔记
  5. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(13)--- 线程安全接口和双检查加锁优化...
  6. java 反编译 在线_「java反编译工具」分享java反编译工具,超级好用 - seo实验室...
  7. YII2 rules 规则验证器
  8. 如何避免大数据分析的失误
  9. 关于Linux不能ping通外网的解决方法
  10. CIO,你想做一辈子“消防员”吗?
  11. 蓝牙音频传输格式:ACC,SBC,APTX和LDAC
  12. 超强大几十款功能组合而成的一款工具箱微信小程序源码下载支持N个流量主
  13. 风险模型—VaR模型2
  14. SPSS入门教程之如何安装并注册
  15. Pom文件配置参数详解
  16. 笔记本电脑无法在插电时睡眠(续)
  17. 【4分频电路 -verilog】
  18. java与英语词汇_Java英语词汇表
  19. 因子分析 factor analysis (七) :因子分析法与主成分分析的异同
  20. MODIS数据批量投影工具

热门文章

  1. ubuntu 12.04/11.10 PPA 安装 Nvidia 295.59
  2. C#中Hashtable表的应用
  3. Android新手之旅(10) 嵌套布局
  4. Xcode 真机程序发布测试
  5. 扫盲 about session,Bean,网关等
  6. No mapping found for HTTP request with URI
  7. Hyper-v Server重复数据删除技术
  8. 循序渐进Python3(二) -- 数据类型
  9. 为什么处理有序数组比无序数组快?
  10. delphi xe2学习笔记(1)