更新生成者模式示例,添加木屋和砖房建造者实现,重构相关代码并增强可读性
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""
|
||||
实例
|
||||
今天伟哥约自己在富士康工作的老乡出来喝酒,没想到老乡最近一直在加班。听说接了个大活,要同时为小米公司和苹果公司代工他们的笔记本电脑和手机生产业务。
|
||||
今天汤宝宝约自己在富士康工作的老乡出来喝酒,没想到老乡最近一直在加班。
|
||||
听说接了个大活,要同时为小米公司和苹果公司代工他们的笔记本电脑和手机生产业务。
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
@@ -98,7 +99,7 @@ class XiaomiFactory(AbstractFactory):
|
||||
def createLaptop(self):
|
||||
return MiLaptop()
|
||||
|
||||
|
||||
# 客户端代码
|
||||
def client(factory: AbstractFactory):
|
||||
phone = factory.createPhone()
|
||||
laptop = factory.createLaptop()
|
||||
@@ -111,17 +112,16 @@ def client(factory: AbstractFactory):
|
||||
def main():
|
||||
print("======== 抽象工厂模式 ========")
|
||||
|
||||
# 伟哥先去苹果工厂生产产品
|
||||
print("伟哥选择了苹果工厂生产产品:")
|
||||
# 先去苹果工厂生产产品
|
||||
factory = AppleFactory()
|
||||
print(f"伟哥选择了{factory.name}生产产品:")
|
||||
print(f"汤宝宝选择了{factory.name}生产产品:")
|
||||
client(factory)
|
||||
|
||||
print("\n切换工厂生产其他品牌的产品...\n")
|
||||
|
||||
# 然后伟哥去小米工厂生产产品
|
||||
# 然后去小米工厂生产产品
|
||||
factory = XiaomiFactory()
|
||||
print(f"伟哥选择了{factory.name}生产产品:")
|
||||
print(f"汤宝宝选择了{factory.name}生产产品:")
|
||||
client(factory)
|
||||
|
||||
print("====== 抽象工厂模式结束 ======")
|
||||
|
||||
@@ -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