更新生成者模式示例,添加木屋和砖房建造者实现,重构相关代码并增强可读性
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user