This can be a creational design sample, it’s helpful when you will have a really fundamental configuration for an object and you would like to present (clone) these predefined values to a different one. Mainly you are making clones from a prototype objects. ๐๐๐
This strategy has some advantages, one is for instance that you do not have to subclass, however you possibly can configure clones individually. This additionally means you can take away a bunch of boilerplate (configuration) code if you will use prototypes. ๐ค
class Paragraph
var font: UIFont
var coloration: UIColor
var textual content: String
init(font: UIFont = UIFont.systemFont(ofSize: 12),
coloration: UIColor = .darkText,
textual content: String = "")
self.font = font
self.coloration = coloration
self.textual content = textual content
func clone() -> Paragraph
return Paragraph(font: self.font, coloration: self.coloration, textual content: self.textual content)
let base = Paragraph()
let title = base.clone()
title.font = UIFont.systemFont(ofSize: 18)
title.textual content = "That is the title"
let first = base.clone()
first.textual content = "That is the primary paragraph"
let second = base.clone()
second.textual content = "That is the second paragraph"
As you possibly can see the implementation is only a few strains of code. You solely want a default initializer and a clone technique. All the things can be pre-configured for the prototype object within the init technique and you may make your clones utilizing the clone technique, however that is fairly apparent at this level… ๐ค
Let’s check out yet another instance:
class Paragraph
var font: UIFont
var coloration: UIColor
var textual content: String
init(font: UIFont = UIFont.systemFont(ofSize: 12),
coloration: UIColor = .darkText,
textual content: String = "")
self.font = font
self.coloration = coloration
self.textual content = textual content
func clone() -> Paragraph
return Paragraph(font: self.font, coloration: self.coloration, textual content: self.textual content)
let base = Paragraph()
let title = base.clone()
title.font = UIFont.systemFont(ofSize: 18)
title.textual content = "That is the title"
let first = base.clone()
first.textual content = "That is the primary paragraph"
let second = base.clone()
second.textual content = "That is the second paragraph"
The prototype design sample can be helpful if you’re planning to have snapshots of a given state. For instance in a drawing app, you can have a form class as a proto, you can begin including paths to it, and in some unspecified time in the future at time you can create a snapshot from it. You’ll be able to proceed to work on the brand new object, however this offers you the flexibility to return to a saved state at any level of time sooner or later. ๐
That is it concerning the prototype design sample in Swift, in a nuthsell. ๐ฟ