iOS 设计模式浅析 1 - 策略
本篇文章主要讲三个点:
1. 什么是策略模式.
2. 策略模式的优缺点.
3. demo .
1. 策略模式
定义一系列算法, 并且将每个算法封装起来, 算法之间可以互相替换. 使用前提: 输入已知, 好比你渴了, 可以喝可乐, 可以喝牛奶, 也可以喝水.
在我们项目中比较常见的使用情况:
1. 切换主题, 要展示图片, 只是展示的图片不同而已.
2. 更换显示状态, 总用淘宝的人知道, 展示界面可以是一排一个 cell, 也可以是一排两个 cell.
放一张图简单明了:
2. 策略模式的优缺点
优点: 逻辑清晰, 代码维护性强
缺点: 代码量会增大一些, 应用场景局限
3. demo
策略最重要的一点是策略类, 它是一个抽象类, 下面有几个具体的实现类, 来实现抽象类中的抽放方法. Context 为场景类, 场景类聚合策略类就是策略模式啦, 下面用一个 demo 来再说明一下:
两个输入框, 两个按钮, 分别验证输入的是否是纯数字和纯英文, 这里有一个策略类 InputTest, 具体实现类: InputNumTest 和 InputEnglishTest, 场景类: 子类化的输入框类 MRTextField
抽象类 InputTest 里面有个两个方法和一个属性, testInputWithTextField: 用于验证输入, testRegexWithRegix:andText: 用于检测正则, desc 为检测错误时的字段描述.
InputEnglishTest 里面写的和 InputNumTest 一样, 只是正则不同, 就直放上 InputNumTest 的截图啦, InputNumTest 继承自 InputTest 类, 实现其抽象方法, 根据传入的 tf 验证输入是否正确.
子类化的输入框类, 聚合了策略类 InputTest, checkInput 用于检测输入是否正确, desc 为检测错误时的描述, .m 文件实现了 checkInput 方法, 用 self.iputTest 检测输入是否正确.
ViewController.m 里实现了具体代码, 初始化策略类, 当检测的时候调用 [tf checkInput] 即可检测输入了.