D107设计模式_1建造者模式20221119

 

一、构建模式

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

 

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

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

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

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

 

三、构建者模式的结构

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
复制代码

 

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

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

posted @   江湖中  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示