【译】设计模式教程--OOP的能力
点击右侧关注,了解黑客的世界!
点击右侧关注,掌握进阶之路!
点击右侧关注,探讨技术话题!
原文链接:medium.com/swift-india…
作者丨Hitendra Solanki
导读--本博客系列要求具有面向对象编程的中级专业知识。您应该对类、对象、构造函数、继承、值和引用类型有基本的了解。通过仔细地从头到尾阅读本系列文章,不管是中级还是高级开发,您都将有所收获。
设计模式用于表示经验丰富的面向对象软件开发人员社区采用的最佳实践。
建造者模式帮助我们更简单更易读地创建一个类,它遵守着以下两条规则:
1、分割原始类和它的构造方法
2、在最后一个返回类的实例
建造者模式最佳的例子就是SwiftUI,是的你没有看错。SwiftUI中大部分类像是Text,Image都是使用的建造者模式。
问题:
想一下,一个Person
类拥有不少于十个属性,当你要使用它时,你需要为它创建一个构造方法。它的构造者将拥有不少于十个参数,去管理这么一个带有很多参数的单一函数或构造方式将是非常困难的,最终你也会让这端代码失去可读性。看下面的例子:
将上面的例子在playground中运行一下,你会得到预期结果。逻辑上这也是对的。
我们可以尝试优化上面的代码,从解决这两个问题入手。
1、我们必须按照既定的顺序传参数,而不能通过重新排列参数提高可读性。
2、即使创建对象时我们不知道一些属性值,我们也不得不传入所有参数。
例如你需要创建一个Person
类,但是这个人还在找工作。只有当他进入某一公司我们才能得到他的工作信息。
解决方案:
1、创建相关属性的逻辑分组。
2、为不同分组的属性创建不同的建造者类。
3、在建造者类中最后一步返回实例。
让我们从上面的例子开始,我们已经拥有一个Person
类,它含有14个属性。我们仔细观察这14个属性,可以将它分为四组。1、个人信息
2、联系方式
3、地址信息
4、公司信息
通过强大的设计模式我们可以解决上面两个问题,具体代码如下:
在上面的例子中,我们把Person
类根据职责分割成了几个不同的类。我们创建了多个建造者,他们分别管理相关分组内的属性,而Person只持有这些建造者。
我们拥有一个建造者基类PersonBuilder
和四个衍生的建造者类,
PersonPersonalDetailsBuilder
, PersonContactDetailsBuilder
, PersonAddressDetailsBuilder
和 PersonCompanyDetailsBuilder
。
当其他四个从Personbuilder
衍生出来的建造者需要更新相关属性时,Personbuilder
这个基类可以帮助我们在它们之间进行转换。
在上面的例子中我们可以看到新的构造方法变得更加易读了,我们可以用一种更加优雅的方式更新一组或者某一个属性。
需要注意一下,上面的例子中我们再每个建造者更新方法之后返回了它自己。这让我们能够在相同的建造者中写出链式方法,而不是分开的多行。这个概念称为流程模式。
优点
1、用一种优雅的方式很容易地初始化一个含很多参数的类。
2、遵从单一职责原则。
3、根据你的情况,以任意的顺序初始化对象和更新属性。
作者丨zhangferry链接:
https://juejin.im/post/5d65f5d8e51d4557dc774ed5来源丨掘金
推荐↓↓↓
长
按
关
注
?【16个技术公众号】都在这里!
涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。
万水千山总是情,点个 “在看” 行不行
本文地址:https://blog.csdn.net/olsQ93038o99S/article/details/100549811
上一篇: 怎么使用分区助手给磁盘重新分区