iOS:设计模式

设计模式是针对软件设计中常见问题的可重用解决方案。 它们是旨在帮助您编写易于理解和重用的代码的模板。 最常见的可可设计模式:

  • 创作性 :单身人士。
  • 结构 :装饰器,适配器,外墙。
  • 行为的 :观察者,和,纪念品

让我们开始吧…… 🏄🏻

正面

Facade设计模式提供了到复杂子系统单个接口。 无需向用户提供一组类及其API,而是仅公开一个简单的统一API。

当使用大量类时,尤其是当它们使用复杂或难以理解时,此模式是理想的选择。当外观下的类可能会更改时,这也很有用,因为外观类可以保留相同的API事情在幕后发生变化。例如,如果您想替换后端服务的日子到了,您将不必更改使用API​​的代码,而只需更改Facade中的代码即可。

装饰器

装饰器模式可以动态地 向对象添加行为和职责,而无需修改其代码。 它是子类化的替代方法,在子类化中,您可以通过将类与另一个对象包装在一起来修改类的行为。

在Objective-C中,此模式有两种非常常见的实现: 类别授权 。 在Swift中,此模式还有两种非常常见的实现: 扩展委托

委托:用于将实现特定的行为排除在通用类之外。 iOS中的许多UI元素都使用委托来控制其行为,例如UIScrollView。 UIScrollView类不知道应该滚动什么,因为那是应用程序特定的任务。 因此,要通知应用程序滚动事件,它将使用UIScrollViewDelegate。 应用程序可以实现委托,然后拦截由UIScrollView发送给它的滚动事件。

纪念品

在Memento模式中, 可以将您的内容保存在某处 。 稍后,可以在不违反封装的情况下恢复此外部状态。 也就是说,私有数据保持私有。 Memento模式的实现示例是存档,序列化和 状态恢复

适配器

适配器设计模式将类的接口转换为客户期望的另一个接口 。 Adapter使类可以协同工作,否则由于接口不兼容而无法实现。 它将客户端与目标对象的类分离。 苹果使用协议来完成这项工作。 您可能熟悉UITableViewDelegateUIScrollViewDelegateNSCodingNSCopyingNSCopying 。 例如,使用NSCopying协议,任何类都可以提供标准的copy方法。

观察者

观察者设计模式定义了对象之间的一对多依赖关系,因此当一个对象改变状态时,其所有依赖关系都会被通知并自动更新。 观察者模式本质上是一个发布和订阅模型,其中主题及其观察者是松散耦合的。 可以在观察对象和被观察对象之间进行通信,而无需彼此了解太多。 可可以两种方式实现观察者模式: 通知键值观察(KVO)

战略

策略模式允许您在运行时更改算法的行为。 使用接口,我们能够定义一系列算法,封装每个算法,并使它们可互换,从而允许我们选择在运行时执行哪种算法。 有关更多信息,请查看Thomas Hanning和Sam Stone的这两本书。

工厂方法模式使代码库更灵活地添加或删除新类型。 要添加新的类型,我们只需要一个新的类型的类和一个新的工厂就可以像下面的代码一样生成它。 有关更多信息,请查看此。

命令

命令设计模式将请求封装为对象,从而使您可以为具有不同请求,队列或日志请求的客户端参数化,并支持可撤销的操作。 请求对象将特定接收者上的一个或多个动作绑定在一起。 命令模式将发出请求的对象与接收并执行该请求的对象分开。

综合

Composite设计模式将相关对象组合成树形结构,以表示部分整体层次结构。 它使客户可以统一对待单个对象和对象组成。 它是Model-View-Controller聚合模式的一部分

迭代器

Iterator设计模式提供了一种在不暴露其基础表示的情况下顺序访问聚合对象(即集合)的元素的方法。 迭代器模式将访问和遍历集合元素的责任从集合本身转移到迭代器对象。 迭代器定义用于访问集合元素的接口,并跟踪当前元素。 不同的迭代器可以执行不同的遍历策略。

调解员

介体设计模式定义了一个对象,该对象封装了一组对象之间的交互方式 。 介体通过防止对象之间显式地相互引用来促进松散耦合 ,并且它使您可以独立地更改它们之间的交互。 这些对象因此可以保持更高的可重用性。 这种模式下的“中介对象”集中了系统中对象之间的复杂通信和控制逻辑。 这些对象在状态改变时告诉中介者对象,并依次响应来自中介者对象的请求。

代理

代理设计模式为另一个对象提供代理或占位符,以控制对它们的访问 。 您可以使用此模式创建代表或代理对象,该对象控制对另一个对象的访问,该对象可能是远程的,创建起来很昂贵,或者需要保护。 这种模式在结构上与Decorator模式类似,但是其用途不同。 装饰器将行为添加到对象,而代理控制对对象的访问。

模板方法

模板方法设计模式定义了操作中算法的框架,将某些步骤推迟到子类 。 模板方法模式允许子类在不更改算法结构的情况下重新定义算法的某些步骤。

辛格尔顿

Singleton设计模式可确保一个类仅具有一个实例,并提供对其的全局访问点 。 该类跟踪其唯一的实例,并确保不能创建其他实例。 Singleton类适用于单个对象提供对全局资源的访问权的情况。 通常在第一次需要时使用延迟加载来创建单个实例。

Singleton,Facade和Decorator — Raywenderlich教程。

适配器,观察者和Momento — Raywenderlich教程