真实世界:iOS设计模式

Design Pattern是演讲,论坛甚至是15分钟的休息谈话中的常见主题。 您可以在书籍或互联网上找到很多关于它的东西,以及使用橡皮鸭🦆,咖啡店☕和比萨店🍕的许多示例。

当我开始学习时,我通常会理解这种模式,但是在考虑如何将其应用于我的代码时遇到了很多麻烦。 我知道Factory模式用于创建对象,但是为什么需要它呢? 我真的需要一个Factory来创建我的对象吗?

我写这篇文章的目的是带来一些我在项目中使用的设计模式的真实示例。

战略

策略模式可以在运行时选择算法。 代码不是直接实现单个算法,而是接收运行时指令,说明要使用的算法系列中的哪个。

我们可以基于运行时使用不同的算法,换句话说,我们不在乎实现是如何完成的。

算法需要一个知道如何fly的对象,一个Duck class也知道如何fly以及一个Rocket class 。 我们的算法不在乎我们的实现是否需要展开翅膀或一加仑的气体。

使用策略解决问题

在这个项目中,我们需要能够接收viewController但是我们还需要它具有一些预定义的行为,并且这是应用Strategy模式的理想场所。 移动应用程序中常见的ViewControllerLogin因此只需创建定义我们的LoginViewController操作和依赖项的协议即可。

我的意思是,我们可以将LoginViewController注入我们的项目中,我们不关心UI是否具有tableView ,任何animation或验证方法,但我们需要它知道如何执行login 。 您可以在此处阅读有关此特定问题的更多信息。

工厂方法模式处理创建对象的问题,而不必指定将要创建的对象的确切类。

当您需要在运行时创建对象时,工厂模式很有用。 因此,如果用户想要芝士披萨,则如果他/她想要意大利辣香肠,则创建一个CheesePizza()创建PepperoniPizza() ftw。

使用工厂解决的问题

在使用strategy模式解决viewController注入问题的同一项目中,我们使用factory模式能够在运行时创建对象,并将其所需的所有依赖项传递给它们。

我们需要推送一个LoginViewController实例,可以使用诸如Storyboardsxibview coded类的不同方法来创建该实例。 我们有一个工厂实例,可以通过更改工厂本身来创建对象的方式进行注入。

对于Factory的实例,我们只需要调用build方法。 这个工厂可以是我们并不在乎的ViewCodedLoginViewControllerFactoryStoryboardLoginViewControllerFactory的实例,我们只需要它来实现返回LoginViewControllerbuild方法。

在这里,我们为每种对象都有一个工厂,但是我们可以有一个工厂,该工厂知道如何从storyboard xibsxibsviewcoded构建ViewController

装饰器

装饰器模式允许将行为静态或动态地添加到单个对象,而不会影响同一类中其他对象的行为。

这是我最喜欢的模式,装饰器模式的经典示例是想在咖啡中添加鲜奶油并根据饮料计算新价格和描述的咖啡店。

使用装饰器解决问题

对于每个服务调用,我们需要不同的API版本,这可以通过许多不同的方式完成,但是我们使用此模式将自定义Header添加到Request 。 通过这种方法,如果将来一个API调用应在其标头中添加另一个参数,我们也可以做好准备。

我们还需要过滤请求中的结果。 可以通过创建新方法或更改请求的工作方式来完成。 我们决定使用Decorator来添加此行为,因为在其他类中使用了我们的服务,并且我们希望在先前的实现中更改最少的行数。

适配器

适配器模式是一种软件设计模式,它允许将现有类的接口用作另一个接口。 它通常用于使现有类与其他类一起使用而无需修改其源代码

将适配器视为真正的适配器。 您需要具有复合视频作为输出的Nintendo 64🎮,以便与新的4k TV work一起使用。 因此,您需要一个复合HDMI适配器。

使用适配器解决问题

我们需要使用Card模型的最后四位数字,并且还必须与PKPaymentPass兼容。 换句话说,创建了一个适配器来将一个PKPaymentPass实例转换为Card

但是我们也可以混合使用模式来创建更多可重用和可维护的代码,例如,将适配器与strategy模式混合。 我们实际上并不需要Card对象,而只需要lastNumbers所以为什么我们不创建协议来做到这一点并与PKPaymentPassCard和项目可能需要的任何其他对象兼容。

最后

Design patterns对我创建更多可重用的代码有很大帮助,在我需要更改代码方面的内容时为我节省了一些时间,由于这些原因,某些任务比应该做的要容易得多。

如果您不了解,这里的模式是如何工作的,则是有关Strategy,Factory,Decorator和Adapter的一些不错的文章。

附:如果您喜欢此帖子,请在Twitter上分享,或在中等水平上推荐,或两者都=)。 这确实有助于我吸引更多人。 非常感谢。