欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Design Patterns - Builder

程序员文章站 2022-04-02 10:50:22
Builder(生成器) — 对象创建型模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用场景创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式(注意,两个重点)当构造过程必须允许被构造的对象有不同的表示时。优点它可以使你改变一个产品的内部表示:因为产品的表示都封装到Builder里面,如果想替换产品的内部表示,只需替换Builder即可。它将构造代码和表示代码分开。它使你可对构造过程进行更精细的控制。其他一些要考虑的实现问题:装配和...

Builder(生成器) — 对象创建型模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用场景

  1. 创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式(注意,两个重点)
  2. 当构造过程必须允许被构造的对象有不同的表示时。

优点

  1. 它可以使你改变一个产品的内部表示:因为产品的表示都封装到Builder里面,如果想替换产品的内部表示,只需替换Builder即可。
  2. 它将构造代码和表示代码分开。
  3. 它使你可对构造过程进行更精细的控制。

其他一些要考虑的实现问题:

  1. 装配和构造接口:生成器逐步构造它们的产品。因此 Builder 类接口必须足够普遍,以便为各种类型的具体生成器构造产品。一个关键的设计问题在于构造和装配过程。构造请求的结果只是被添加到产品中,这样是没什么问题的,但如果在一个构造接口中需要它前序构造请求的结果,这种情况下,生成器应该将前者的结果返回给导向器,然后导向器将他们回传给生成器去创建父节点。

UML图

Design Patterns - Builder

示例

class Meal(object):
    def __init__(self, food="", drink=""):
        self.food = food
        self.drink = drink

class MealBuilder(object):
    meal = Meal()

    def buildFood(self):
        raise NotImplementedError

    def buildDrink(self):
        raise NotImplementedError

    def getMeal(self):
        return self.meal

class MealBuilderA(MealBuilder):
    def buildFood(self):
        self.meal.food = "薯条"

    def buildDrink(self):
        self.meal.drink = "可乐"

class MealBuilderB(MealBuilder):
    def buildFood(self):
        self.meal.food = "鸡翅"

    def buildDrink(self):
        self.meal.drink = "柠檬果汁"

class KFCDirector:
    def __init__(self, builder):
        self.builder = builder

    def construct(self):
        self.builder.buildFood()
        self.builder.buildDrink()
        return self.builder.meal



client


director = KFCDirector(MealBuilderA())
meal = director.construct()
print(meal.food)
print(meal.drink)
print("*******************")
director.builder = MealBuilderB()
meal = director.construct()
print(meal.food)
print(meal.drink)
"""
output:
薯条
可乐
*******************
鸡翅
柠檬果汁
"""

本文地址:https://blog.csdn.net/qq_34921856/article/details/110943391

相关标签: 设计模式 python