Swift中的设计模式:工厂模式

欢迎来到一系列致力于学习设计模式的文章。 尽管许多想法与代码无关,但我们的目标是向您展示如何在Swift中实现它们(在撰写本文时为Swift 3.0)。 每个帖子彼此独立,所有项目代码都可以 在Git上找到

传统上,工厂模式是面向对象语言中使用最多的模式之一。 Factory模式的作用是在运行时使用多态为对象分配一个类。 当客户端不知道所需的确切类时使用它。 所有可能的类都从相同的超类扩展(或实现相同的接口),从而为我们提供了许多可供选择的类。

神奇宝贝就是一个容易证明的例子。

入门级神奇宝贝(Bulbasaur,Squirtle和Charmander)都属于神奇宝贝。 他们有共同的特征。 例如,它们必须具有名称,并且必须具有类型。 但是,尽管它们需要名称和类型,但每个神奇宝贝的名称和类型都不同且有所不同。

这在代码中意味着什么,就是我们有一个神奇宝贝超类。 该超类将包含对名称和类型的引用。 然后使用继承,我们继承了共同的特征,并针对我们想要的神奇宝贝专门对其进行了操纵。

我们将构建一个程序,询问用户他们希望他们的入门神奇宝贝是什么,然后将正确的选定数据返回给用户。

以下是UML图中的外观:

首先,在Xcode中创建一个新项目。 我们不会在UIKit中碰任何东西,因此创建一个macOS Terminal项目。

首先,我们将创建所有神奇宝贝都将继承的神奇宝贝超类。 它看起来像这样:

接下来,我们将创建每个单独的神奇宝贝。 这些类非常简单。 它们只需要初始化,在初始化期间,我们将设置名称和类型。 这些看起来像这样:

现在我们需要创建实际的工厂类。 这是上演魔术的课。 它将包含一种方法。 我们将为其提供一个字符串,作为回报,它将基于该字符串为我们提供一个神奇宝贝对象。 它看起来像这样:

请注意,由于神奇宝贝可能为nil ,我们需要使用问号将其设置为可选。

将它们放到我们的主类中将如下所示:

我们要求用户选择一个神奇宝贝。 如果存在,则返回正确的神奇宝贝,如果不存在,则向用户显示一条消息。

运行程序。 这是一个示例,如果您为Bulbasaur选择“ B”,您将在终端中看到以下内容:

  选择您的首发口袋妖怪​​(B =鼠尾草/ C = man火鸡/ S =松鼠) 

您选择了Bulbasaur。 这是草宝可梦
程序以退出代码结束:0

多数民众赞成在工厂模式完成! 和往常一样,您可以在Git上找到所有代码

山姆·斯通(@ Stonesam92)| 推特
Sam Stone(@ Stonesam92)的最新推文。 移动开发人员和嘻哈迷。 #iosdev #swiftlang #objC。 曼彻斯特… twitter.com