網站首頁 編程語言 正文
一、建造者模式
建造者模式,顧名思義類似于建筑工人,他們按照有條理的施工順序(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
相關推薦
- 2022-05-02 C語言實現簡單回聲服務器_C 語言
- 2022-04-10 Android中Protobuf的基本使用介紹_Android
- 2022-07-07 Python推導式使用詳情_python
- 2022-04-23 Python中ini配置文件讀寫的實現_python
- 2022-09-29 Python3中map(),reduce(),filter()的詳細用法_python
- 2022-02-02 ionic 禁止橫屏處理
- 2024-01-29 深入了解 Spring BeanPostProcessor 的應用
- 2022-11-23 Qt采用線程以隊列方式實現下發數據_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支