软考
APP下载

创建者模式举例

创建者模式(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)

```

以上就是一个创建者模式的例子,这个例子充分说明了创建者模式的各种威力,使用创建者模式可以大大增加代码的复用性和可读性。

四、本文总结

本文从创建者模式的组成结构、创建者模式的优点和创建者模式的举例出发,详细阐述了创建者模式在实际应用中的重要性和价值,建议读者们在应用开发过程中,多加关注和使用创建者模式,以提高程序代码复用性、灵活性和可维护性。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库