Design Patterns - Builder
程序员文章站
2022-04-02 10:50:22
Builder(生成器) — 对象创建型模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用场景创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式(注意,两个重点)当构造过程必须允许被构造的对象有不同的表示时。优点它可以使你改变一个产品的内部表示:因为产品的表示都封装到Builder里面,如果想替换产品的内部表示,只需替换Builder即可。它将构造代码和表示代码分开。它使你可对构造过程进行更精细的控制。其他一些要考虑的实现问题:装配和...
Builder(生成器) — 对象创建型模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用场景
- 创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式(注意,两个重点)
- 当构造过程必须允许被构造的对象有不同的表示时。
优点
- 它可以使你改变一个产品的内部表示:因为产品的表示都封装到Builder里面,如果想替换产品的内部表示,只需替换Builder即可。
- 它将构造代码和表示代码分开。
- 它使你可对构造过程进行更精细的控制。
其他一些要考虑的实现问题:
- 装配和构造接口:生成器逐步构造它们的产品。因此 Builder 类接口必须足够普遍,以便为各种类型的具体生成器构造产品。一个关键的设计问题在于构造和装配过程。构造请求的结果只是被添加到产品中,这样是没什么问题的,但如果在一个构造接口中需要它前序构造请求的结果,这种情况下,生成器应该将前者的结果返回给导向器,然后导向器将他们回传给生成器去创建父节点。
UML图
示例
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
推荐阅读
-
atom-design(Vue.js移动端组件库)手势组件使用教程
-
Android Notification.Builder通知案例分享
-
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
-
设计模式之构建(Builder)模式 建造房子实例分析
-
使用CSS3 制作一个material-design 风格登录界面实例
-
PHP设计模式之建造者模式(Builder)原理与用法案例详解
-
Android设计模式之Builder模式详解
-
Android构建Material Design应用详解
-
Android实现Ant Design 自定义表单组件
-
Report Builder怎么安装?Report Builder3.0安装详细图文教程