更多内容欢迎关注公众号:Swift花园
原型设计模式用于创建基础对象的复制。
当你有一组对象的基础配置时,你需要复制这些预定义的值给一个新的对象。这个过程,你其实正在复制原型对象。😊😊😊
这种方法有一个好处,你不需要使用子类,而是通过独立的复制配置对象,这样可以避免一些样板代码。🤔
class Paragraph {
var font: UIFont
var color: UIColor
var text: String
init(font: UIFont = UIFont.systemFont(ofSize: 12),
color: UIColor = .darkText,
text: String = "") {
self.font = font
self.color = color
self.text = text
}
func clone() -> Paragraph {
return Paragraph(font: self.font, color: self.color, text: self.text)
}
}
let base = Paragraph()
let title = base.clone()
title.font = UIFont.systemFont(ofSize: 18)
title.text = "This is the title"
let first = base.clone()
first.text = "This is the first paragraph"
let second = base.clone()
second.text = "This is the second paragraph"原型实现只需要很少的代码,包括一个默认的构造器和一个克隆方法。在 init 方法中,所有的东西都会被预先配置,你通过克隆方法拿到这个原型对象。这一点显而易见。🤐
让我们再看另一个例子:
class Paragraph {
var font: UIFont
var color: UIColor
var text: String
init(font: UIFont = UIFont.systemFont(ofSize: 12),
color: UIColor = .darkText,
text: String = "") {
self.font = font
self.color = color
self.text = text
}
func clone() -> Paragraph {
return Paragraph(font: self.font, color: self.color, text: self.text)
}
}
let base = Paragraph()
let title = base.clone()
title.font = UIFont.systemFont(ofSize: 18)
title.text = "This is the title"
let first = base.clone()
first.text = "This is the first paragraph"
let second = base.clone()
second.text = "This is the second paragraph"当你想要保留某个状态的快照时,原型设计模式也有用处。比如,在一个绘图应用里,你用了一个形状作为原型,然后开始添加路径,画到某个节点时,你决定做一个快照,然后继续绘制。这个快照让你拥有在未来任意时刻回到那个节点的能力。🎉🐿
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~