首页 > 其他分享 >D107设计模式_1构建模式20221119

D107设计模式_1构建模式20221119

时间:2022-11-26 10:00:13浏览次数:49  
标签:__ body head 20221119 D107 self build 设计模式 def

 

一、构建模式

构建模式属于对象的创建模式,可以把对象的内部属性和构建方法分离开来,可以构建自己需要的属性。
当有些对象比较复杂的时候,需要的属性比较灵活的就需要用到构建模式

 

二、构建者模式和抽象工厂模式的区别:

抽象工厂模式主要注重与创建一个产品,而不注重细节,

抽象工厂模式将对象的全部都封装到工厂类中,有工厂类提供最终的产品;而构建者模式也是创造一个产品,但是更加注重于细节的实现,

它一般只提供产品类的各个组件的建造,而将具体的建造过程交付给指导者,由指导者负责将各个组件按照特定的规则组建产品,然后将组建好的产品交付给客户端。

 

三、构建者模式的结构

1.Director(指导者) 主要功能是复制安排复杂对象的的建造顺序,与Builder之间存在关联关系,通过

construct()建造方法中调用Builder的部件构造和装配方法实现复杂对象的建造。

客户端一般至于指导者交互,在客户端确定Builder的类型,并实例化具体对象通过构造函数或者Setter()方法将对象传入指导者中。

2.Builder(抽象建造者)对复杂对象的创建过程加以抽象,给出一个抽象接口以规范对象的各个部分的建造,该接口或者抽象类一般声明两类方法:

一类是:buildXXX() 用以创建对象的各个部分,另一类是getXXX() 用以返回复杂的对象。

3.ConcreateBuilder(具体构建者)它实现了Builder的接口,针对不同的业务逻辑,实现了对复杂对象的各个部分的创建。

4.Product(产品角色)含有多个组件是被构建的复杂对象由ConcreateBuilder创建该产品的内部表示并定义

 

四、实现

 

 

import string
import abc

# 产品-product
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):
    # 接口类,制定规范,只要此类必须要设置以下的被abstractmethod装饰的这些方法。
    @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

# 具体建造者1Doraemon
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 = "短腿"


# 具体建造者2 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 = "带有推进器的机械腿"

# 指挥者 director  确定建造顺序
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))  # 构建机器人1

    gundam = Gundam()
    print(director.build(gundam))  # 构建机器人2

 

【输出结果】
第一步:安装身体
第二步:安装头
第三步:安装手臂
第四步:安装脚
我是一个机器人:('蓝色的狸猫头', '带有百宝袋的身体', '圆手', '短腿')

第一步:安装身体
第二步:安装头
第三步:安装手臂
第四步:安装脚
我是一个机器人:('白色的机械头', '钢铁般的身体', '带有巨炮的机械手', '带有推进器的机械腿')

标签:__,body,head,20221119,D107,self,build,设计模式,def
From: https://www.cnblogs.com/BetterDo/p/16926945.html

相关文章

  • C++ 设计模式 目录
    设计模式推荐阅读ohmyfish.net​未来更新会先在​​ohmyfish.net​​更新,等到一定规模会发到平台上,如果有修改和补充也会在​​ohmyfish​​上进行。目标理解松耦合设计思......
  • [设计模式] Factory Method
    [设计模式]FactoryMethod动机在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new)......
  • [设计模式] Template Method
    TemplateMethod动机在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务......
  • 设计模式你怎么看?--抽象工厂模式
    一 前言在设计模式中有简单工厂,工厂方法,抽象工厂,这三种工厂方法,各自有各自的特点,但有都有共同的特点工厂(Factory)都是围绕着工厂类转,这篇只写"抽象工厂"相关的内......
  • 设计模式——模板方法模式
    对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型......
  • 设计模式
    单例模式:确保全局只有一个该类的实例预加载:占用内存,将类的实例化私有,在类中声明一个静态的实例。外部可以直接调用。懒加载:无需占用内存,将类的实例化私有,且在类中创建一......
  • Java 设计模式:工厂模式
    目录工厂模式(FactoryPattern)实现简单工厂模式示例工厂方法模式示例抽象工厂模式示例参考工厂模式(FactoryPattern)所属:创建型模式,适用时机:我们明确地计划不同条件下创建......
  • 设计模式——2、原型模式
     在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多......
  • java23种设计模式概述总结
    软件设计模式的意义:它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠......
  • 设计模式——1、单例模式
    在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个......