iOS 设计模式浅析 1 - 策略

本篇文章主要讲三个点: 

    1. 什么是策略模式.

    2. 策略模式的优缺点.

    3. demo .

1. 策略模式

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

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

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

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

放一张图简单明了:

2. 策略模式的优缺点

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

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

3. demo

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

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

      ps: 继承和实现接口类似, 所以这里直接用的继承.

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

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

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

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

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

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

推荐阅读更多精彩内容