设计模式

Design Patterns on iOS using Swift – Part 1/2
Design Patterns on iOS using Swift – Part 2/2

在开发此应用程序的过程中,您将熟悉最常见的Cocoa设计模式:

  • 创建型 (Creational):单例模式 (Singleton)
  • 结构型 (Structural):MVC、装饰者模式 (Decorator)、适配器模式 (Adapter)、外观模式 (Facade)
  • 行为型 (Behavioral):观察者模式 (Observer)、备忘录模式 (Memento)

设计模式之王 – MVC

Model-View-Controller (MVC)是Cocoa的构建块之一,无疑是最常用的设计模式。它根据对象在应用程序中的角色(role)对对象进行分类,并鼓励基于角色(role)的代码清晰分离。

这三个角色是:

  • model: 保存应用程序(application)数据的对象,并定义如何操作它。例如,在您的应用程序(application)中,ModelAlbum结构,您可以在Album.swift中找到它。大多数应用程序将有多个类型作为其模型的一部分
  • View: 负责model的可视化表示的对象和用户可以与之交互的控件;基本上,所有UIView派生的对象。在您的应用程序中,ViewAlbumView表示,您可以在AlbumView.swift中找到它。
  • ViewController: 控制器是协调所有工作的中介。它访问model中的数据并将其用view显示,监听事件并根据需要操作数据。你能猜出哪个class是你的controller吗?那是对的:ViewController

通过Controller可以最好地描述ViewModel之间的通信,如下图所示:

截屏2021-05-07 上午10.45.28.png

单例模式

final class LibraryAPI {
  // 1
  static let shared = LibraryAPI()
  // 2
  private init() {
    
  }
}
复制代码

避免滥用单例

1. 全局状态
// 一个单例可以被使用在任何地方,而不需要显式地声明依赖。主要是用在测试里面,需要格外注意测试的顺序
2. 对象的生命周期
// 单例应该只用来保存全局的状态,并且不能和任何作用域绑定。如果这些状态的作用域比一个完整的应用程序的生命周期要短,那么这个状态就不应该使用单例来管理。
复制代码

在不可避免使用单例的情况,应当考虑使用单例plus, 即对象仍然可以自己创建实例对象

外观模式 (The Facade Design Pattern)

**外观(Facade)设计模式:**为复杂子系统提供单一接口(interface),您只需公开一个简单的统一API,而不是暴露给使用者一组classes及其APIs

使用场景: 组件化时候,module内进行统一的API抽取,或者引用第三方库的时候,可以进行一层基于API的封装。在比如SDWebimage或者kingfisher中加载网络图片的使用。都是使用者不需要知道内部的逻辑的调用方式。

下面这张图解释了这个概念:

API的使用者完全不需要知道API内部的复杂性。当使用大量类时,这种模式是理想的,特别是当它们使用起来复杂或难以理解时

装饰者模式(The Decorator Design Pattern)

**装饰者(Decorator)模式:**动态地向对象添加行为(behaviors)和职责(responsibilities)而无需修改其代码。它是子类化的替代方法,通过用另一个对象包装它来修改类的行为。

在Swift中,这种模式有两种非常常见的实现:ExtensionsDelegation

Extensions

添加扩展是一种非常强大的机制,允许您向现有结构体枚举类型添加新功能,而无需子类。更令人惊叹的,你可以扩展你无法访问的代码,并增强他们的功能。这意味着你可以将自己的方法添加到Cocoa类,如UIViewUIImage

注意: 类当然可以覆盖父类的方法,但是使用扩展时不能。扩展中的方法或属性不能与原始类中的方法或属性同名。

Delegation

Decorator设计模式的另一个实现是委托(delegate),它是一种机制,其中一个对象代表另一个对象或与另一个对象协同工作。

适配器模式(The Adapter Pattern)

适配器(Adapter)允许具有不兼容接口的类一起工作。它将自身包裹在一个对象周围,并公开一个标准接口以与该对象进行交互。

如果您熟悉适配器模式,那么您会注意到Apple以稍微不同的方式实现它 — Apple使用协议(protocols)来完成工作。您可能熟悉UITableViewDelegateUIScrollViewDelegateNSCodingNSCopying等协议。例如,使用NSCopying协议,任何类都可以提供标准的复制方法。

观察者模式

Observer模式中,一个对象通知其他对象任何状态更改。所涉及的对象不需要彼此了解 – 从而鼓励分离设计。此属性最常用于在属性发生更改时通知感兴趣的对象。

通常的实现要求观察者注册对另一个对象的状态的兴趣。当状态改变时,所有观察对象都被通知该改变。

Cocoa以两种方式实现观察者模式:NotificationsKey-Value Observing (KVO)

工厂模式(The Memento Pattern)

类簇

备忘录模式(The Memento Pattern)

**备忘录模式:**捕获并外化对象的内部状态。换句话说,它可以在某处保存你的东西。稍后,可以在不违反封装的情况下恢复此外部化状态;也就是说,私人数据仍然是私有的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享