首页 > 编程语言 >Python设计模式-02-建造者模式

Python设计模式-02-建造者模式

时间:2023-06-16 18:11:11浏览次数:47  
标签:02 product Python self 建造 part build 设计模式 def

建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括以下几个角色:

  • 产品(Product):表示被构建的复杂对象,通常包含多个部分或组件。
  • 抽象建造者(Builder):定义了创建产品的抽象接口,包括创建产品的各个部分的方法。
  • 具体建造者(Concrete Builder):实现了抽象建造者接口,负责创建产品的各个部分,并组装成最终的产品。
  • 指挥者(Director):负责调用具体建造者来创建产品的各个部分,并组装成最终的产品。

下面是一个简单的 Python 示例,演示了如何使用建造者模式创建一个包含多个部分的产品:

class Product:
    def __init__(self):
        self.part_a = None
        self.part_b = None
        self.part_c = None

class Builder:
    def build_part_a(self):
        pass

    def build_part_b(self):
        pass

    def build_part_c(self):
        pass

    def get_product(self):
        pass

class ConcreteBuilder(Builder):
    def __init__(self):
        self.product = Product()

    def build_part_a(self):
        self.product.part_a = 'Part A'

    def build_part_b(self):
        self.product.part_b = 'Part B'

    def build_part_c(self):
        self.product.part_c = 'Part C'

    def get_product(self):
        return self.product

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

    def construct(self):
        self.builder.build_part_a()
        self.builder.build_part_b()
        self.builder.build_part_c()

builder = ConcreteBuilder()
director = Director(builder)
director.construct()
product = builder.get_product()

print(product.part_a)  # 输出 'Part A'
print(product.part_b)  # 输出 'Part B'
print(product.part_c)  # 输出 'Part C'

在上面的示例中,我们定义了一个 Product 类,它表示被构建的复杂对象,包含了多个部分。然后,我们定义了一个抽象建造者 Builder,它定义了创建产品的抽象接口,包括创建产品的各个部分的方法和获取产品的方法。接下来,我们定义了一个具体建造者 ConcreteBuilder,它实现了抽象建造者接口,负责创建产品的各个部分,并组装成最终的产品。最后,我们定义了一个指挥者 Director,它负责调用具体建造者来创建产品的各个部分,并组装成最终的产品。

在使用建造者模式时,我们首先创建一个具体建造者对象,然后将它传递给指挥者对象。指挥者对象调用具体建造者对象的方法来创建产品的各个部分,并最终获取到完整的产品对象。需要注意的是,具体建造者对象可以根据需要进行替换,从而创建不同的产品。

标签:02,product,Python,self,建造,part,build,设计模式,def
From: https://www.cnblogs.com/superhin/p/17486235.html

相关文章

  • python自动使用虚拟环境和安装依赖
    代码如下,Windows环境测试通过importosimportplatformimportreimportsysfrompathlibimportPathdefis_venv()->bool:"""判断是否处于虚拟环境(也适用于poetry的)"""ifhasattr(sys,"real_prefix"):returnTruer......
  • AI2023矢量设计:Illustrator2023(Win&Mac) 激活版
    lustrator2023是Adobe公司推出的一款专业矢量图形设计软件。它可以用于创作各种类型的设计项目,如商标、图标、海报、包装等。使用Illustrator2023,用户可以创建高质量的矢量图形,这些图形可以任意缩放而不会失真,因此非常适合制作需要多种尺寸的设计项目。此外,该软件还支持创建复杂的......
  • 8路TTL串口转以太网串口服务器芯片EBT3002功能
    EBT3002串口服务器芯片简介EBT3002 以太网芯片是实现8路TTL串口数据与以太网数据互相转换的以太网串口服务器芯片;该以太网芯片具有多种Modbus网关模式以及TCP/DUP/MQTT/HTTP物联网网关模式,可满足各类串口IO联网设备与PLC设备的联网功能。以太网芯片采用采用LQFP100封装,便于用户......
  • Python - 方法参数中,带self和不带self的区别
    不带self该python文件中,没有类的概念。因此所有的方法参数中,没有self#文件名solution.pydefpartition(head:Optional[ListNode],x:int)->Optional[ListNode]:#...if__name__=='__main__':#注意这里的区别...partition() 如果未来要在其他类里......
  • python中parse的action = store_true含义
     我们在python脚本中经常看到action="store_true,如下图: parser.add_argument('--image',default=False,action="store_true",help='Imagedetectionmode,willignoreallpositionalarguments') 如果运行代码时加了   --image,那么im......
  • 用python生成正玄波信号源码解析
    一前记项目需要生成不同频点的正玄波信号,没找到现成的软件,只能自己写一个了。顺便温习一下python。 二源码解析:#!/usr/bin/pythonimportnumpyasnpfromscipyimportsignalimportwaveimportstructimportsysnum_samples=48000sampling_rate=48000.0ampl......
  • 2023.6.16 每日一题
    原题链接B-Technocup2020-EliminationRound1-DB.SequenceSorting-2000题目大意给定一个数组,定义一个操作:选定一个数,将所有值等于这个数的数移动到数组的一端(数组头或者数组尾)。问将数组变成非递减序列最少需要多少操作次数。解题思路对于每一种数,我们记录他们......
  • SummerResearch_Log_20230613
    WorkingContent:1.上次的问题得到解决:(1)数据集就是8个文件夹,代表八个类别(忽略注释说的四个类),databloader会为他们分配labels。(2)incrementallearning和backdoor结合是将干净的数据集和被污染的数据集两个任务分别训练。2.基于TyXe的VCL方法终于跑通了,下面是在mnist和cifar数......
  • 亚马逊云科技re:Inforce 2023全球大会,让安全成为业务发展驱动力
    S&P《企业之声:2022年信息安全、预算和展望》研究报告指出,有37%的受访者表示云基础设施安全是他们的主要安全支出,65%的受访者表示将计划采用云供应商的高级安全服务。安全是亚马逊云科技的重中之重,re:Inforce全球大会则深化了亚马逊云科技在安全领域的承诺。 关于re:Inforce的历史......
  • 2023年大湾区青少年信息学能力提升夏令营开营了
    报名时间:2023年6月1日-2023年7月23日你是否对信息学充满了好奇?是否希望提升自己的编程技能和算法思维?那么,2023年大湾区青少年信息学能力提升夏令营正是你展现才华、探索无限潜能的机会!授课团队阵容强大夏令营的授课团队包括NOI(全国青少年信息学奥林匹克竞赛)金牌教师和钻石教师,他们......