iOS 设计模式浅析 1 - 策略

稀土 2017-12-16

本篇文章主要讲三个点:

1. 什么是策略模式.

2. 策略模式的优缺点.

3. demo .

1. 策略模式

定义一系列算法, 并且将每个算法封装起来, 算法之间可以互相替换. 使用前提: 输入已知, 好比你渴了, 可以喝可乐, 可以喝牛奶, 也可以喝水.

在我们项目中比较常见的使用情况:

1. 切换主题, 要展示图片, 只是展示的图片不同而已.

2. 更换显示状态, 总用淘宝的人知道, 展示界面可以是一排一个 cell, 也可以是一排两个 cell.

放一张图简单明了:

iOS 设计模式浅析 1 - 策略

2. 策略模式的优缺点

优点: 逻辑清晰, 代码维护性强

缺点: 代码量会增大一些, 应用场景局限

3. demo

策略最重要的一点是策略类, 它是一个抽象类, 下面有几个具体的实现类, 来实现抽象类中的抽放方法. Context 为场景类, 场景类聚合策略类就是策略模式啦, 下面用一个 demo 来再说明一下:

iOS 设计模式浅析 1 - 策略

两个输入框, 两个按钮, 分别验证输入的是否是纯数字和纯英文, 这里有一个策略类 InputTest, 具体实现类: InputNumTest 和 InputEnglishTest, 场景类: 子类化的输入框类 MRTextField

iOS 设计模式浅析 1 - 策略iOS 设计模式浅析 1 - 策略

抽象类 InputTest 里面有个两个方法和一个属性, testInputWithTextField: 用于验证输入, testRegexWithRegix:andText: 用于检测正则, desc 为检测错误时的字段描述.

iOS 设计模式浅析 1 - 策略

InputEnglishTest 里面写的和 InputNumTest 一样, 只是正则不同, 就直放上 InputNumTest 的截图啦, InputNumTest 继承自 InputTest 类, 实现其抽象方法, 根据传入的 tf 验证输入是否正确.

iOS 设计模式浅析 1 - 策略iOS 设计模式浅析 1 - 策略

子类化的输入框类, 聚合了策略类 InputTest, checkInput 用于检测输入是否正确, desc 为检测错误时的描述, .m 文件实现了 checkInput 方法, 用 self.iputTest 检测输入是否正确.

iOS 设计模式浅析 1 - 策略iOS 设计模式浅析 1 - 策略

ViewController.m 里实现了具体代码, 初始化策略类, 当检测的时候调用 [tf checkInput] 即可检测输入了.

这里是 demo的传送门, 如果喜欢的话, 大家可以为这篇文章点个 ❤️, 加个关注呦!

相关推荐