更新生成者模式示例,添加木屋和砖房建造者实现,重构相关代码并增强可读性

This commit is contained in:
2025-12-09 21:55:32 +08:00
parent 29e554b670
commit cc736d524b
7 changed files with 394 additions and 21 deletions
+121
View File
@@ -0,0 +1,121 @@
"""
实例
汤宝宝想要建造一栋属于自己的房子,于是找来了著名的建筑设计
公司——生成者模式公司(Builder Pattern Inc.)帮忙设计和建造房子。
"""
from abc import ABC, abstractmethod
# 产品: 房子
class House(ABC):
foundation: str
structure: str
roof: str
# 抽象建造者: 房屋建造者
class HouseBuilder(ABC):
@abstractmethod
def buildFoundation(self) -> None:
pass
@abstractmethod
def buildStructure(self) -> None:
pass
@abstractmethod
def buildRoof(self) -> None:
pass
@abstractmethod
def getHouse(self) -> House:
pass
# 具体建造者: 木屋建造者
class WoodenHouseBuilder(HouseBuilder):
def __init__(self):
self.house = House()
def buildFoundation(self) -> None:
self.house.foundation = "木桩地基"
print(" 建造木桩地基")
def buildStructure(self) -> None:
self.house.structure = "木结构"
print(" 建造木结构")
def buildRoof(self) -> None:
self.house.roof = "木屋顶"
print(" 建造木屋顶")
def getHouse(self) -> House:
return self.house
# 具体建造者: 砖房建造者
class BrickHouseBuilder(HouseBuilder):
def __init__(self):
self.house = House()
def buildFoundation(self) -> None:
self.house.foundation = "混凝土地基"
print(" 建造混凝土地基")
def buildStructure(self) -> None:
self.house.structure = "砖结构"
print(" 建造砖结构")
def buildRoof(self) -> None:
self.house.roof = "瓦屋顶"
print(" 建造瓦屋顶")
def getHouse(self) -> House:
return self.house
# 指挥者
class Director:
builder: HouseBuilder
house: House
def reset(self) -> None:
if hasattr(self, "house"):
del self.house
def setBuilder(self, builder: HouseBuilder) -> None:
self.builder = builder
def constructHouse(self):
self.reset()
self.builder.buildFoundation()
self.builder.buildStructure()
self.builder.buildRoof()
self.house = self.builder.getHouse()
def main():
print("======== 生成者模式 ========")
director = Director()
print("建造木屋:")
builder = WoodenHouseBuilder()
director.setBuilder(builder)
director.constructHouse()
house = director.house
print(f"木屋建造完成: {house.foundation}, {house.structure}, {house.roof}\n")
print("建造砖房:")
builder = BrickHouseBuilder()
director.setBuilder(builder)
director.constructHouse()
house = director.house
print(f"砖房建造完成: {house.foundation}, {house.structure}, {house.roof}\n")
print("====== 生成者模式结束 ======")
if __name__ == "__main__":
main()