thinking

What is software? Software exists to solve practical problems in life, and the design mode in software is just a summary of time-limited life. Even if you design the mode well, the software will not only be more expandable, but also feed back to your real life. Let’s take KFC as an example.

KFC order

When entering KFC, there will be many set meals, A, B, C and D.

  • Smaller ones have only one place to order, and larger ones have multiple places to order simultaneously.
  • There are many waiters and waitresses preparing all kinds of set meals that customers order
  • In the back, these are the real builders of the meal.

We do this through the builder pattern.

The Builder pattern for creating patterns

  • KFCWaiter: Conductor objects command specific MealBuilder to get the complete package
  • MealBuilder: Abstract builder
  • MealBuilderA: Concrete builder
  • Meal: package

KFC order code

Class KFCBuilder{enum MealType{case mealA case mealB} /// func orderMeal(type:MealType) throws{var mealBuilder:MealBuilder? switch type { case .mealA: mealBuilder = MealBuilderA() case .mealB: mealBuilder = MealBuilderB() } guard let builder = mealBuilder else{ throw(NSError()) } let waiter = KFCWaiter() waiter.setMealBuilder(builder) }Copy the code

}

The Director

class KFCWaiter{
private(set) var mb:MealBuilder? /// construct func construct()-> Meal? { mb? .buildDrink() mb? .buildMeal() return mb? .getMeal() } func setMealBuilder(_ mb:MealBuilder){ self.mb = mb }Copy the code

Copy the code

}

package

class Meal{
    var drink:String?
    var food:String?
}
Copy the code

The builders

Class MealBuilder{lazy var meal: meal = meal () func buildDrink(){
} func buildMeal(){ } func getMeal()-> Meal? { return meal }Copy the code

} // the builder is A class MealBuilderA:MealBuilder{override func buildDrink(){matrice.drink = "A type of drink" BuildMeal (){matrice.food = "type A eats"}} /// specific builder B class MealBuilderB:MealBuilder{override func buildDrink(){matrice.drink Override func buildMeal(){meal. Food = "B "}}

Copy the code

In some restaurants, the waiter and Builder roles are merged into one, and as the store gets bigger and more people, the responsibilities are divided again. It’s the same with companies.

Distinguish between

The difference between the Builder model and the Factory Brothers:

  • Need to create a simple product when using factory three brothers
  • When you need to create a composite product, use the Builder pattern

reference

  • https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html

This article is formatted using MDNICE