iOS 设计模式浅析 1 - 策略

1,023 阅读2分钟

本篇文章主要讲三个点:

      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] 即可检测输入了.

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