返回
Swift 设计模式:Builder
IOS
2023-09-11 08:16:52
概述
Builder 设计模式的主要优点包括:
- 将复杂对象的创建过程抽象出来,使得创建复杂对象的过程变得更加容易。
- 提高代码的可读性和可维护性。
- 代码更加灵活,可以轻松地创建不同类型的复杂对象。
- 遵循单一职责原则和分离关注点原则。
用法
Builder 设计模式的实现方式有很多种,但总体来说,它遵循以下步骤:
- 定义一个 Builder 接口,该接口包含创建复杂对象的所有步骤。
- 定义一个具体的 Builder 类,该类实现了 Builder 接口中的所有方法,并负责创建复杂对象的各个部分。
- 定义一个 Director 类,该类负责调用 Builder 类中的方法,并最终创建复杂对象。
- 使用 Builder 类和 Director 类创建复杂对象。
示例
以下是一个使用 Builder 设计模式创建复杂对象的示例:
protocol PizzaBuilder {
func buildCrust()
func buildSauce()
func buildToppings()
func buildCheese()
func getPizza() -> Pizza
}
class MargheritaPizzaBuilder: PizzaBuilder {
private var pizza: Pizza!
func buildCrust() {
pizza.crust = "Thin crust"
}
func buildSauce() {
pizza.sauce = "Tomato sauce"
}
func buildToppings() {
pizza.toppings = ["Mozzarella cheese", "Fresh basil"]
}
func buildCheese() {
pizza.cheese = "Parmesan cheese"
}
func getPizza() -> Pizza {
return pizza
}
init() {
pizza = Pizza()
}
}
class PepperoniPizzaBuilder: PizzaBuilder {
private var pizza: Pizza!
func buildCrust() {
pizza.crust = "Thick crust"
}
func buildSauce() {
pizza.sauce = "Spicy tomato sauce"
}
func buildToppings() {
pizza.toppings = ["Pepperoni", "Mozzarella cheese"]
}
func buildCheese() {
pizza.cheese = "Provolone cheese"
}
func getPizza() -> Pizza {
return pizza
}
init() {
pizza = Pizza()
}
}
class PizzaDirector {
private var builder: PizzaBuilder!
func setBuilder(builder: PizzaBuilder) {
self.builder = builder
}
func buildPizza() {
builder.buildCrust()
builder.buildSauce()
builder.buildToppings()
builder.buildCheese()
}
func getPizza() -> Pizza {
return builder.getPizza()
}
}
class Pizza {
var crust: String!
var sauce: String!
var toppings: [String]!
var cheese: String!
func printPizza() {
print("Crust:", crust)
print("Sauce:", sauce)
print("Toppings:", toppings.joined(separator: ", "))
print("Cheese:", cheese)
}
}
// Usage
let pizzaDirector = PizzaDirector()
pizzaDirector.setBuilder(builder: MargheritaPizzaBuilder())
pizzaDirector.buildPizza()
let margheritaPizza = pizzaDirector.getPizza()
margheritaPizza.printPizza()
pizzaDirector.setBuilder(builder: PepperoniPizzaBuilder())
pizzaDirector.buildPizza()
let pepperoniPizza = pizzaDirector.getPizza()
pepperoniPizza.printPizza()
输出:
Crust: Thin crust
Sauce: Tomato sauce
Toppings: Mozzarella cheese, Fresh basil
Cheese: Parmesan cheese
Crust: Thick crust
Sauce: Spicy tomato sauce
Toppings: Pepperoni, Mozzarella cheese
Cheese: Provolone cheese