当创建一个对象需要逐步设置所有属性来创建,而不是直接通过一个初始化方法设置所有属性的时候就需要用到生成器模式。
在创建该对象的时候我们不直接使用该类进行创建,而是通过一个Director的一个简单方法直接创建。在Director这个类中,我们也不直接使用该类,而是使用一个Builder进行创建,builder能够逐步设置要创建的对象的所有属性。
Director
// Director
public class Employee {
public func createCombol() throws -> Hamburger {
let builder = HamburgerBuilder()
try builder.setMeat(.beef)
builder.addSauces(.secret)
builder.addToppings([.lettuce, .tomatoes, .pickles])
return builder.build()
}
public func createKittenSpecial() throws -> Hamburger {
let builder = HamburgerBuilder()
try builder.setMeat(.kitten)
builder.addSauces(.mustard)
builder.addToppings([.lettuce, .tomatoes])
return builder.build()
}
}
其中的HamburgerBuilder是builder
builder创建目标对象的方法
public func build() -> Hamburger {
return Hamburger(meat: meat, sauce: sauces, toppings: toppings)
}
其中的Hamburger是最终创建目标对象的类
demo地址:
https://github.com/pro648/BasicDemos-iOS/tree/master/BuilderPattern
(注:个人感觉很少用到生成器模式,增加了复杂度,一般都是直接一个初始化方法进行创建,可能是本人还没遇到要用该模式的场景)