创建者模式(Builder Pattern)是一种基于对象的软件设计模式,用于创建复杂对象。它分离了一个复杂对象的构建与表示,使得同样的构建过程可以创建不同的表示。本文将从多个角度分析创建者模式,并通过一个举例来说明它的实际应用。
一、创建者模式的组成结构
创建者模式通常由五个组成部分组成:Director(指导者)、Builder(抽象建造者)、ConcreteBuilder(具体建造者)、Product(产品)和Client(客户端)。
• Director:负责指挥具体建造者构建产品对象。
• Builder:定义了创建产品对象的接口,包含了创建不同部件的抽象方法。
• ConcreteBuilder:具体的建造类,实现了Builder中定义的抽象方法,返回组装好的产品实例。
• Product:产品对象,包含了创建步骤中被组装过程中所需的所有组件。
• Client:使用Builder接口来构造复杂对象。
二、创建者模式的优点
创建者模式主要有以下优点:
• 减少对象的构造函数重载。
• 可以使对象的构造函数参数更直观、更友好。
• 可以避免创建构造函数缺少必要的参数时所引发的错误。
• 可以增加实现类的灵活性,使得实现类可以自由组合实现Builder接口中的方法,进而实现不同的对象组成方式。
• 降低了对象创建和使用的耦合度,程序的拓展性更好。
三、创建者模式的举例
下面我们通过一个例子来说明一下创建者模式的实际应用。假设我们需要创建一个有点异国情调的自助餐饮店,客人在店中可以自由挑选各种食物,我们需要一个创建这种自助餐的建造者模式。
首先是我们的指导者——Manager。Manager负责协调构建自助餐需要的各个对象,拥有对Builder的引用,在Manager中封装了对象的构建流程。
```
class Manager:
def __init__(self, builder):
self.builder = builder
def construct(self):
self.builder.buildMainCourse()
self.builder.buildSideDish()
self.builder.buildDrinks()
```
然后我们需要创建一个抽象builder类,也就是自助餐的抽象类。自助餐需要MainCourse、SideDish和Drinks,我们在Builder类中定义了这几种属性,并且还有了构造函数、显示、收集这些方法。
```
class Builder:
def __init__(self):
self.main_course = None
self.side_dish = None
self.drinks = None
def createNewMeal(self):
self.__init__()
def buildMainCourse(self):
pass
def buildSideDish(self):
pass
def buildDrinks(self):
pass
def displayMeal(self):
print(f"Main Course: {self.main_course}, Side Dish: {self.side_dish}, Drinks: {self.drinks}")
def getMeal(self):
return dict(MainCourse=self.main_course, SideDish=self.side_dish, Drinks=self.drinks)
```
接下来我们有了Builder,接下来创建的是ConcerteBuilder,也就是门口的店。我们需要使用Builder类中的方法将自助餐构建起来。
```
class HotelBuilder(Builder):
def buildMainCourse(self):
self.main_course = "Tandoori chicken"
def buildSideDish(self):
self.side_dish = "Pav Bhaji"
def buildDrinks(self):
self.drinks = "Chai tea"
```
最后是我们的客户端Client,客户端不需要知道有哪些部分,只需要通过Manager来构造自助餐即可。
```
class Client:
def __init__(self, builder):
self.builder = builder
def createMeal(self):
self.builder.createNewMeal()
self.builder.buildMainCourse()
self.builder.buildSideDish()
self.builder.buildDrinks()
def printMeal(self):
self.builder.displayMeal()
builder = HotelBuilder()
manager = Manager(builder)
client = Client(builder)
client.createMeal()
client.printMeal()
manager.construct()
meal = builder.getMeal()
print(meal)
```
以上就是一个创建者模式的例子,这个例子充分说明了创建者模式的各种威力,使用创建者模式可以大大增加代码的复用性和可读性。
四、本文总结
本文从创建者模式的组成结构、创建者模式的优点和创建者模式的举例出发,详细阐述了创建者模式在实际应用中的重要性和价值,建议读者们在应用开发过程中,多加关注和使用创建者模式,以提高程序代码复用性、灵活性和可维护性。
微信扫一扫,领取最新备考资料