日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

  • <ruby id="evoqz"><object id="evoqz"></object></ruby>

        學無先后,達者為師

        網站首頁 編程語言 正文

        Python?設計模式中的創建型建造者模式_python

        作者:范桂颶 ? 更新時間: 2022-04-20 編程語言

        一、建造者模式

        建造者模式,顧名思義類似于建筑工人,他們按照有條理的施工順序(e.g. 打樁 => 澆筑框架 => 砌墻 => 裝修)來進行建筑的修建。對于千差萬別的建筑,都可以復用同樣的施工流程。因為不同的材料、不同設計,可以有不同的表現。

        建造者模式,與抽象工廠模式同樣用于實例化復雜的對象,主要區別在于:

        • 抽象工廠模式側重于實例化多個系列的復雜對象。
        • 建造者模式側重于一步步有序地構造一個復雜對象。

        二、代碼示例

        按照有序的步驟來組裝(建造)一個復雜對象。

        實體角色:

        • 抽象建造者(Builder
        • 具體建造者(Concrete Builder
        • 指揮者(Director
        • 產品(Product
        import abc
        
        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):
        ? ??
        ? ? @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
        ? ??
        
        # 具體建造者 Doraemon
        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 = "短腿"
        ? ? ? ??
        ? ? ? ??
        # 具體建造者 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 = "帶有推進器的機械腿"
        ? ? ? ??
        ? ? ? ??
        # 指揮者,確定建造順序
        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))
        ? ??
        ? ? gundam = Gundam()
        ? ? print(director.build(gundam))

        原文鏈接:https://is-cloud.blog.csdn.net/article/details/122922317

        欄目分類
        最近更新