单例,立面和命令模式

外立面设计模式,单例设计模式,命令设计模式,Swift,Objective C,iOS

本周,我们将学习三种新模式,单例,立面和命令。

Singleton :Singleton Pattern确保一个类只有一个实例,并提供对其的全局访问点。

外观 :外观模式可让您计划对子系统的更改。

命令 :将请求封装在对象中,允许将具有不同请求的客户端参数化,允许将请求保存在队列中。

单例模式是一种软件设计模式,它将类的实例化限制为一个对象。 当仅需要一个对象来协调整个系统中的动作时,这将很有用。

在目标C中:

在Swift中:

  • 抽象工厂,构建器和原型模式可以在实现中使用单例。
  • 外观对象通常是单例,因为只需要一个外观对象。
  • 状态对象通常是单例。
  • 单例通常优于全局变量,因为:

1.它们不会用不必要的变量污染全局名称空间(或在具有名称空间的语言中,它们包含的名称空间)。[4]

2.它们允许延迟分配和初始化,而许多语言中的全局变量将始终消耗资源。

外观是充当前端接口的对象,可掩盖更复杂的基础代码或结构代码。

iOS iOS中的一个示例是UIImage类,该类是一个外观,它提供了一个用于使用和加载基于矢量或基于位图的图像的接口,因此,无论应用程序使用哪种图像类型,它可以使用UIImage并且不知道该类下发生了什么。

在目标C中:

在Swift中:

命令模式是一种行为设计模式,其中的对象用于封装以后执行动作或触发事件所需的所有信息。

Command设计模式可以解决哪些问题?

  • 应该避免将请求的调用者耦合到特定的请求。 也就是说,应该避免硬性要求。
  • 应该可以用请求配置一个对象(调用一个请求)。

将请求直接实现(硬连接)到类中是不灵活的,因为它在编译时将类耦合到特定的请求,这使得无法在运行时指定请求。

命令设计模式描述了什么解决方案?

  • 定义用于封装请求的单独(命令)对象。
  • 类将请求委托给命令对象,而不是直接实现特定的请求。

这样一来,便可以使用用于执行请求的命令对象来配置类。 该类不再与特定请求关联,并且不知道(独立于)如何执行请求。

在Swift中:让我们为命令和切换功能创建一个协议。 假设有两个设备支持例如ex的打开/关闭功能:空调,空气净化器。

我们有一个接口,它定义了接收者可以执行的操作 -Switchable

由于每种设备都有两种类型的命令,因此我们需要为每种设备实现具体的命令,如下所示:

  打开/关闭设备的命令 -ConcreteCommand 
  测试班或客户 

通过实现命令模式,Controller类不知道设备类型及其实现,但提供用于处理设备的接口。

下一页:装饰器,介体和桥模式

希望您喜欢,请随时发表评论或鼓掌鼓励🙂

参考文献:

  1. https://zh.wikipedia.org/wiki/Singleton_pattern
  2. https://zh.wikipedia.org/wiki/Facade_pattern
  3. https://zh.wikipedia.org/wiki/Command_pattern