示例
from abc import ABCMeta, abstractmethod# ----------------------------------------# Product# ----------------------------------------class Player: """ Product """ 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}, " f"{self.body}, " f"{self.arm}, " f"{self.leg}.")# ----------------------------------------# Builder# ----------------------------------------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# ----------------------------------------# Concrete Builder# ----------------------------------------class SexyGirlBuilder(PlayerBuilder): def __init__(self): self.player = Player() def build_face(self): self.player.face = '漂亮脸蛋' def build_body(self): self.player.body = '苗条' def build_arm(self): self.player.arm = '漂亮胳膊' def build_leg(self): self.player.leg = '大长腿'class MonsterBuilder(PlayerBuilder): def __init__(self): self.player = Player() def build_face(self): print('怪物脸') def build_body(self): print('怪物身体') def build_arm(self): print('怪物胳膊') def build_leg(self): print('怪物腿')# ----------------------------------------# Director# ----------------------------------------class PlayerDirector: @staticmethod def build_player(_builder): _builder.build_body() _builder.build_face() _builder.build_arm() _builder.build_leg() return _builder.player# ----------------------------------------# client# ----------------------------------------builder = SexyGirlBuilder()director = PlayerDirector()player = director.build_player(builder)print(player)运行结果
