设计模式-创建型-建造者模式

建造者模式是一种设计模式,用于分步骤构建复杂对象,并允许创建不同表示。通过分离对象的构建和表示,它使得构建过程可控制,同时提供了多种构建方式。例如,在游戏场景中,可以使用建造者模式来创建不同类型的玩家角色,如性感女孩或怪物,每个角色由脸、身体、胳膊和腿等部分组成,组装顺序由指挥者控制。这种模式的优点在于隐藏了产品的内部结构和装配过程,使得构造代码与表示代码分离,且能对构建过程进行精细化控制。
摘要由CSDN通过智能技术生成

建造者模式

概述

  • 将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示
  • 建造者模式与抽象工厂模式相似,也用来创建复杂对象,主要区别是建造者模式着重一步步构建复杂对象,而抽象工厂模式着重于多个系列的对象

角色

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

例子

"""生产一个游戏玩家,游戏玩家由脸、身体、腿、胳膊组成,组装时有顺序要求"""

from abc import ABCMeta, abstractmethod

# 产品
class Player:
    def __init__(self, face=None, body=None, arm=None, leg=None):
        self.face = face
        self.body = body
        self.arm = arm
        self.leg = leg
    
    def __str__(self):
        return f"{self.face}, {self.body}, {self.arm}, { self.leg}"
        
# 抽象建造者
class PlayerBuilder(metaclass=ABCMeta):
    @abstractmethod
    def build_face(self):
        pass

    @abstractmethod
    def build_body(self):
        pass

    @abstractmethod
    def build_arm(self):
        pass

    @abstractmethod
    def build_leg(self):
        pass

# 具体建造者
class SexGirlBuilder(PlayerBuilder):

    def __init__(self):
        self.player = Player()
    
    def build_face(self):
        self.player.face = "SexGirl face"

    def build_body(self):
        self.player.body = "SexGirl body"

    def build_arm(self):
        self.player.arm = "SexGirl arm"

    def build_leg(self):
        self.player.leg = "SexGirl leg"

class MonsterBuilder(PlayerBuilder):

    def __init__(self):
        self.player = Player()
    
    def build_face(self):
        self.player.face = "Monster face"

    def build_body(self):
        self.player.body = "Monster body"

    def build_arm(self):
        self.player.arm = "Monster arm"

    def build_leg(self):
        self.player.leg = "Monster leg"

# 指挥者
class PlayerDirector: # 控制组装顺序
    def build_player(self, builder):
        builder.build_body()
        builder.build_face()
        builder.build_arm()
        builder.build_leg()
        return builder.player

builder = SexGirlBuilder()
director = PlayerDirector()
p = director.build_player(builder)
print(p)

优点

  • 隐藏了一个产品的内部结构和装配过程
  • 将构造代码与表示代码分开
  • 可以对构建过程进行更精细控制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值