Hello, World!

设计模式

字数统计: 1.2k阅读时长: 4 min
2019/01/18 Share

很多刚入门的iOS开发者经过一段时间学习,可以熟练的调用各种API。这时候写一个tableView、实现一个小动画、独立完成一个交互的功能已经不在话下,但同时iOS开发者也就到了技术上的第一个瓶颈——即拥有独立开发一个功能的水平,却似乎并未达到独立开发一个App的水准;看似什么都会做、什么都能做,却总是不能在第一时间想到最佳方案。功能是完成了,然而效率上不是很高,代码逻辑在日后也可能需要返工重构。

我个人认为,突破这个瓶颈的捷径就是掌握设计模式。设计模式是前人总结的、面对开发中常见问题的解决方案——它们行之有效、便于理解、适合举一反三。简单点说,设计模式就是开发中的套路和模板。熟练掌握设计模式,可以提高开发效率,节省开发时间。

iOS开发中常见的设计模式

iOS开发中的设计模式有很多,一般最常见的有这7种:

MVC

是应用的一种基本架构,主要目的是将不同的代码归于不同的模块,做到低耦合、代码分配合理、易于扩展维护的目的。

MVC 是 Model-View-Controller 的简称。它是苹果官方推荐的 App 开发架构,也是一般开发者最先遇到的、最经典的架构。它把整个 App 分成了三个部分:Model 负责处理数据;View 负责处理 UI;Controller 是 View 和 Model 的桥梁,它将数据从 Model 传送到 View 层展示出来,同时将 View 层的交互传到 Model 层以改变数据。相比于传统的 MVC,苹果的 MVC 的特点是 Model 和 View 层是相互独立的。

由于 Controller 承担的任务相对较重,实际开发中很多初级的开发者直接将 View 和 Controller 部分的代码全部塞到了 ViewController 类中,造成了它们的高度耦合。如何解耦 View 和 Controller,在 iOS 开发中是一个热门的话题。

装饰模式(Decorator)

它可以在不修改原代码的基础上进行拓展。注意它与继承最大的区别是:继承时,子类可以修改父类的行为,而装饰模式不希望如此。

装饰模式是在不改变原封装的前提下,为对象动态添加新功能的模式。在 Objective-C中,它的实现形式为Category和Delegation;在Swift 中,它的表现形式是Extension和Delegation。

  • Category的好处之一是可以给类增加新的方法,它也可以利用动态特性增加新的变量。同时,Category的出现也减轻了类的负担,我们可以利用它将代码分散开来。它的文件名一般为“类名+扩展名”。

  • Extension在Swift中的地位等同于Category在Objective-C中的地位。它更强大的地方在于可以为 Protocol 扩展完成默认实现。

  • Delegation是程序中一个对象代表另一个对象,或者一个对象与另外一个对象协同工作的模式。一般配合 protocol 使用,例如 tableView 的 UITableViewDataSource 和 UITableViewDelegate 就是典型的 Delegation 模式。注意,delegate 一般声明为 weak 以防止循环引用。

适配器模式(Adapter)

将一个类的接口转化为另一个类的接口,使得原本互不兼容的类可以通过接口一起工作。

外观模式(Facade)

用一个公共接口来连接多个类或其他数据类型。公共接口让多个类互相之间保持独立,解耦性良好。同时使用接口时,外部无需理解其背后复杂的逻辑。另外就算接口背后的逻辑改变也不影响接口的使用。

单例模式(Singleton)

单例模式保证对于一个特有的类,只有一个公共的实例存在。它一般与懒加载一起出现,只有被需要时才会创建。单例模式的例子有 UserDefaults.standard,UIApplication.shared,UIScreen.main。

观察者模式(Observer)

定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。在iOS中的典型实现是通知和KVO。

备忘录模式(Memento)

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象回复到保存之前的状态。

其最经典的使用方法就是用 UserDefaults 来读写,同时配合栈可以存储一系列状态。它经常用于初始化、重启、App 前后台状态改变等地方。

CATALOG
  1. 1. iOS开发中常见的设计模式
    1. 1.1. MVC
    2. 1.2. 装饰模式(Decorator)
    3. 1.3. 适配器模式(Adapter)
    4. 1.4. 外观模式(Facade)
    5. 1.5. 单例模式(Singleton)
    6. 1.6. 观察者模式(Observer)
    7. 1.7. 备忘录模式(Memento)