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

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python?設(shè)計(jì)模式中的創(chuàng)建型建造者模式_python

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

一、建造者模式

建造者模式,顧名思義類似于建筑工人,他們按照有條理的施工順序(e.g. 打樁 => 澆筑框架 => 砌墻 => 裝修)來進(jìn)行建筑的修建。對(duì)于千差萬別的建筑,都可以復(fù)用同樣的施工流程。因?yàn)椴煌牟牧稀⒉煌O(shè)計(jì),可以有不同的表現(xiàn)。

建造者模式,與抽象工廠模式同樣用于實(shí)例化復(fù)雜的對(duì)象,主要區(qū)別在于:

  • 抽象工廠模式側(cè)重于實(shí)例化多個(gè)系列的復(fù)雜對(duì)象。
  • 建造者模式側(cè)重于一步步有序地構(gòu)造一個(gè)復(fù)雜對(duì)象。

二、代碼示例

按照有序的步驟來組裝(建造)一個(gè)復(fù)雜對(duì)象。

實(shí)體角色:

  • 抽象建造者(Builder
  • 具體建造者(Concrete Builder
  • 指揮者(Director
  • 產(chǎn)品(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"我是一個(gè)機(jī)器人:{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 = "藍(lán)色的貍貓頭"
? ? ? ??
? ? 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 = "白色的機(jī)械頭"
? ?
? ? def build_body(self):
? ? ? ? super().build_body()
? ? ? ? self.robot.body = "鋼鐵般的身體"
? ? ? ??
? ? def build_arms(self):
? ? ? ? super().build_arms()
? ? ? ? self.robot.arms = "帶有巨炮的機(jī)械手"
? ? ? ??
? ? def build_legs(self):
? ? ? ? super().build_legs()
? ? ? ? self.robot.legs = "帶有推進(jìn)器的機(jī)械腿"
? ? ? ??
? ? ? ??
# 指揮者,確定建造順序
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

欄目分類
最近更新