Python 设计模式中的创建型建造者模式

目录
  • 一、建造者模式
  • 二、代码示例

一、建造者模式

建造者模式,顾名思义类似于建筑工人,他们按照有条理的施工顺序(e.g. 打桩 => 浇筑框架 => 砌墙 => 装修)来进行建筑的修建。对于千差万别的建筑,都可以复用同样的施工流程。因为不同的材料、不同设计,可以有不同的表现。

建造者模式,与抽象工厂模式同样用于实例化复杂的对象,主要区别在于:

  • 抽象工厂模式侧重于实例化多个系列的复杂对象。
  • 建造者模式侧重于一步步有序地构造一个复杂对象。

二、代码示例

按照有序的步骤来组装(建造)一个复杂对象。

实体角色:

  • 抽象建造者(Builder
  • 具体建造者(Concrete Builder
  • 指挥者(Director
  • 产品(Product
import abc

class Robot:
    
    def __init__(self, head=None, body=None, arms=None, legs=None):
        self.head = head
        self.body = body
        self.arms = arms
        self.legs = legs
        
    def __str__(self):
        return f"我是一个机器人:{self.head, self.body, self.arms, self.legs}"
    

# 抽象建造者
class RobotBuilder(metaclass=abc.ABCMeta):
    
    @abc.abstractmethod
    def build_head(self):
        print("第二步:安装头")
        pass
    
    @abc.abstractmethod
    def build_body(self):
        print("第一步:安装身体")
        pass
    
    @abc.abstractmethod
    def build_arms(self):
        print("第三步:安装手臂")
        pass
    
    @abc.abstractmethod
    def build_legs(self):
        print("第四步:安装脚")
        pass
    

# 具体建造者 Doraemon
class Doraemon(RobotBuilder):
    
    def __init__(self):
        self.robot = Robot()
        
    def build_head(self):
        super().build_head()
        self.robot.head = "蓝色的狸猫头"
        
    def build_body(self): 
        super().build_body()
        self.robot.body = "带有百宝袋的身体"
        
    def build_arms(self):
        super().build_arms()
        self.robot.arms = "圆手"
        
    def build_legs(self):
        super().build_legs()
        self.robot.legs = "短腿"
        
        
# 具体建造者 Gundam
class Gundam(RobotBuilder):
    
    def __init__(self):
        self.robot = Robot()
        
    def build_head(self):
        super().build_head()
        self.robot.head = "白色的机械头"
   
    def build_body(self):
        super().build_body()
        self.robot.body = "钢铁般的身体"
        
    def build_arms(self):
        super().build_arms()
        self.robot.arms = "带有巨炮的机械手"
        
    def build_legs(self):
        super().build_legs()
        self.robot.legs = "带有推进器的机械腿"
        
        
# 指挥者,确定建造顺序
class BuildDirector:
    
    def build(self, builder):
        builder.build_body()
        builder.build_head()
        builder.build_arms()
        builder.build_legs()
        return builder.robot
    

if __name__ == "__main__":
    director = BuildDirector()
    
    doraemon = Doraemon()
    print(director.build(doraemon))
    
    gundam = Gundam()
    print(director.build(gundam))

到此这篇关于Python 设计模式中的创建型建造者模式的文章就介绍到这了,更多相关Python建造者模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现的建造者模式示例

    本文实例讲述了Python实现的建造者模式.分享给大家供大家参考,具体如下: #!/usr/bin/python # -*- coding:utf-8 -*- #建造者基类 class PersonBuilder(): def BuildHead(self): pass def BuildBody(self): pass def BuildArm(self): pass def BuildLeg(self): pass #胖子 class PersonFatBuilder(PersonBuild

  • Python建造者模式案例运行原理解析

    建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与表现相分离,这样,同一个过程就有不同的表现. ​ 假设我们要创建一个HTML页面生成器就可以使用建造者模式.该模式中,有两个参与者:建造者(builder)和指挥者(director).建造者负责创建负责对象的各个组成部分.在HTML例子中,这些组成部分包括:页面标题.文本标题.内容主体和页脚.指挥者使用一个建造者实例控制建造的过程.对

  • Python3实现建造者模式的示例代码

    建造者模式 建造者模式用于创建复杂的对象.使用建造者模式可以使复杂的过程层次明了.清晰,把对象的创建以及使用进行了解耦.实际上从代码的角度上看,是进行了多次封装,使代码结构更为规范合理,层次结构更加鲜明. 在一个复杂的对象中,需要编写大量的代码去实现这一个类,并且在进行初始化时,也有可能会有大量的参数去进行初始化. 建造者模式把实现一个类给拆分成多个创建步骤,这些步骤在大多数相关资料中,一般以拟人化的形式进行表达:例如建造者.指挥者以及导演者,但是这些名词的拟人化并不能完全的让读者能够get到完

  • 深入解析Python设计模式编程中建造者模式的使用

    建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示. 基本思想 某类产品的构建由很多复杂组件组成: 这些组件中的某些细节不同,构建出的产品表象会略有不同: 通过一个指挥者按照产品的创建步骤来一步步执行产品的创建: 当需要创建不同的产品时,只需要派生一个具体的建造者,重写相应的组件构建方法即可. 代码结构 class Builder(object): """基类""" def Part1(self): # 不同类型

  • Python设计模式之建造者模式实例详解

    本文实例讲述了Python设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的demo #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--建造者模式 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得

  • Python 设计模式中的创建型建造者模式

    目录 一.建造者模式 二.代码示例 一.建造者模式 建造者模式,顾名思义类似于建筑工人,他们按照有条理的施工顺序(e.g. 打桩 => 浇筑框架 => 砌墙 => 装修)来进行建筑的修建.对于千差万别的建筑,都可以复用同样的施工流程.因为不同的材料.不同设计,可以有不同的表现. 建造者模式,与抽象工厂模式同样用于实例化复杂的对象,主要区别在于: 抽象工厂模式侧重于实例化多个系列的复杂对象. 建造者模式侧重于一步步有序地构造一个复杂对象. 二.代码示例 按照有序的步骤来组装(建造)一个复杂

  • Python设计模式中的创建型工厂模式

    目录 一.工厂模式(Factory Pattern) 二.应用场景 三.编码示例 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 一.工厂模式(Factory Pattern) 工厂模式(Factory Pattern),提供了一种实例化(创建)对象的最佳方式. 在工厂模式中,首先定义了一个抽象的工厂类(class Factory),并且在该工厂类中定义了提供了一个通用的.用于实例化对象的 Interface(接口)函数.然后当 Client 想要实例化某个具体的类的对象时,只需要将需求告

  • Python设计模式中的行为型策略模式

    目录 一.策略模式 二.应用场景 三.代码示例 一.策略模式 策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换.这意味着,让一个类的行为(算法)可以在类的实例化对象运行时进行更改. 优点: 定义了一系列可重用的算法和行为. 消除了一些条件语句. 可以提供相同行为的不同实现. 缺点: Client 必须了解不同的策略行为细节. 二.应用场景 根据不同的客户属性,采用不同的折扣策略来计算订单中的商品价格: 有 1000 或以上积分的客户,每个订单享

  • Python设计模式中的结构型桥接模式

    目录 一.桥接模式 二.应用场景 三.代码示例 一.桥接模式 桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来. (类)抽象部分(Abstraction):存在于多个实体中的共同的概念性联系,就是抽象化.作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待. (对象)实体部分(Implementation):抽象化给出的具体实现,就是实现化. 简而言之,桥接模式就是指在一个软件系统的抽象化和实现化之间,使用组合/聚合关系而不是继承关

  • Python设计模式创建型原型模式

    目录 一.原型模式 二.应用场景 三.代码示例 一.原型模式 原型是相对于复制.克隆而言的,但是不同于模板,模板创造出的东西是一模一样,而原型创造出的东西是允许存在差异化和个性化的. 原型模式的实现思路是:“深拷贝” 和 “属性更新”.定义一个原型,设计一个拷贝接口,不需要频繁实例化类,只需要拷贝. 优点: 减少因为对象实例化而产生的损耗,并实行动态装载. 二.应用场景 三.代码示例 要实现多个人的自我介绍,一般方法是每个人都创建一个对象,但是使用原型模式之后,只需要实例化一个对象(标准人),后

  • Python 设计模式中命令模式

    目录 1.命令模式 2.应用场景 3.代码示例 1.命令模式 命令模式的目的是解耦调用操作的对象(调用者)和提供实现的对象(接收者). 命令模式的思路是在调用者和接收者之间插入一个命令类(Command),该命令类定义了一个 execute 接口,并且该接口实际上是调用了接收者中的具体方法来执行具体命令,以此可以通过扩展命令子类来扩展多个不同的接收者. 这样调用此命令的调用者就和命令接收者之间解耦了. 优势: 封装性好,每个命令都被封装起来,对于客户端来说,需要什么功能就去调用相应的命令,而无需

  • Java结构型设计模式中的适配器模式与桥接模式解析

    适配器模式 定义 适配器模式(英语:adapter pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起. 有两类适配器模式: 1. 对象适配器模式 - 对象适配器通过关联满足用户期待接口,还降低了代码间的不良耦合.在工作中推荐使用"对象适配". 2. 类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承),java中没有多重继承,所以这里不做介绍. 实现 1. Target - 定义C

  • Python设计模式中的结构型适配器模式

    目录 一.适配器模式 二.应用场景 三.代码示例 方式一 方式二 一.适配器模式 适配器,顾名思义是一种万能的接口,达到万能转换的效果. 适配器模式,定义一个适配器类,并且在该类中定义了适配器接口,这些适配接口能够将原来由于接口不兼容而不能在一起工作的多种类型进行适配,使得它们能够一同工作. 二.应用场景 三.代码示例 实体角色: 目标接口(Target):定义提供给 Client 访问的接口,可以是一个抽象类或接口,也可以是具体类.待适配的类 / 适配者类(Adaptee):被适配的角色,它们

  • 简介Python设计模式中的代理模式与模板方法模式编程

    代理模式 Proxy模式是一种常用的设计模式,它主要用来通过一个对象(比如B)给一个对象(比如A) 提供'代理'的方式方式访问.比如一个对象不方便直接引用,代理就在这个对象和访问者之间做了中介 python的例子 你先设想:一个对象提供rgb三种颜色值,我想获得一个对象的rgb三种颜色,但是我不想让你获得蓝色属性,怎么办? class Proxy(object): def __init__(self, subject): self.__subject = subject # 代理其实本质上就是属

  • Python设计模式中的备忘录模式

    目录 备忘录模式 应用场景 代码示例 总结 备忘录模式 备忘录模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单来说,就是在运行过程中我们可以记录某个状态,当遇到错误时恢复当前状态,这在业务流程中是用设计来处理异常情况. 优点: 有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取.这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界.

随机推荐