希赛考试网
首页 > 软考 > 软件设计师

创建者模式举例

希赛网 2024-04-28 14:07:12

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

```

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

四、本文总结

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

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划