更新各个设计模式示例,添加工厂方法、原型和单例模式的实现,重构相关代码并增强可读性

This commit is contained in:
2025-12-11 16:57:10 +08:00
parent cc736d524b
commit 357c4748f8
10 changed files with 558 additions and 1 deletions
+64
View File
@@ -0,0 +1,64 @@
"""
实例
小汤有一家披萨店,他想通过工厂方法模式来创建不同类型的披萨。
首先,他定义了一个披萨接口和具体的披萨类,然后创建了一个披萨工厂接口和具体的披萨工厂类来生产不同类型的披萨。
"""
from abc import ABC, abstractmethod
# 披萨接口
class Pizza(ABC):
@abstractmethod
def show(self):
pass
# 披萨工厂接口
class PizzaFactory(ABC):
@abstractmethod
def createPizza(self) -> Pizza:
pass
# 具体的披萨类
class CheesePizza(Pizza):
def show(self):
print(" 这是个芝士披萨!\n")
class PepperoniPizza(Pizza):
def show(self):
print(" 这是个意大利辣香肠披萨!\n")
# 具体的披萨工厂类
class CheesePizzaFactory(PizzaFactory):
def createPizza(self) -> Pizza:
return CheesePizza()
class PepperoniPizzaFactory(PizzaFactory):
def createPizza(self) -> Pizza:
return PepperoniPizza()
def main():
print("========= 工厂方法模式 =========")
# 创建芝士披萨
factory = CheesePizzaFactory()
print("芝士披萨工厂启动:")
pizza = factory.createPizza()
pizza.show()
# 创建意大利辣香肠披萨
factory = PepperoniPizzaFactory()
print("意大利辣香肠披萨工厂启动:")
pizza = factory.createPizza()
pizza.show()
print("======= 工厂方法模式结束 =======")
if __name__ == "__main__":
main()
+84
View File
@@ -0,0 +1,84 @@
"""
实例
汤宝宝穿越到了星球大战世界,并掉到了克隆人军队的生产工厂。
"""
from abc import ABC, abstractmethod
from copy import deepcopy
# 克隆人接口
class CloneTrooper(ABC):
@abstractmethod
def clone(self) -> "CloneTrooper":
pass
@abstractmethod
def fight(self):
pass
@abstractmethod
def setid(self, id: int):
pass
# 具体的克隆人类
class CloneTrooperA(CloneTrooper):
def __init__(self, id: int):
self.id = id
def clone(self):
print(f"克隆人A-{self.id}号正在克隆...")
return deepcopy(self)
def fight(self):
print(f"克隆人A-{self.id}号准备战斗!")
def setid(self, id: int):
self.id = id
class CloneTrooperB(CloneTrooper):
def __init__(self, id: int):
self.id = id
def clone(self):
print(f"克隆人B-{self.id}号正在克隆...")
return deepcopy(self)
def fight(self):
print(f"克隆人B-{self.id}号准备战斗!")
def setid(self, id: int):
self.id = id
def main():
print("========= 原型模式 =========")
# 创建原型克隆人A
prototype_a = CloneTrooperA(0)
prototype_a.fight()
clone_a1 = prototype_a.clone()
clone_a1.setid(1)
clone_a1.fight()
clone_a2 = clone_a1.clone()
clone_a2.setid(2)
clone_a2.fight()
# 创建原型克隆人B
prototype_b = CloneTrooperB(0)
prototype_b.fight()
clone_b1 = prototype_b.clone()
clone_b1.setid(1)
clone_b1.fight()
clone_b2 = clone_b1.clone()
clone_b2.setid(2)
clone_b2.fight()
print("\n======= 原型模式结束 =======")
if __name__ == "__main__":
main()
+42
View File
@@ -0,0 +1,42 @@
"""
实例
汤宝宝混穿到了泰拉世界,并成为了泰拉联邦的唯一统治者。人类只有一个帝皇!
"""
# 帝皇类
class Emperor(object):
__instance = None
__name = ""
def __new__(cls, name: str, announce: str):
if not cls.__instance:
cls.__instance = super(Emperor, cls).__new__(cls)
cls.__instance.__name = name
return cls.__instance
def __init__(self, name: str, announce: str) -> None:
print(announce)
@property
def name(self) -> str:
return self.__name
def main() -> None:
print("========= 单例模式 =========")
# 创建帝皇
emperor1 = Emperor("汤宝宝", "泰拉联邦的帝皇诞生了!")
print(f"帝皇的名字是:{emperor1.name}!")
emperor2 = Emperor("王二狗", "泰拉联邦的帝皇又一次诞生了!")
print(f"帝皇的名字是:{emperor2.name}!")
if emperor1 is emperor2:
print(f"泰拉只有一个帝皇:{emperor1.name}!\n")
print("======= 单例模式结束 =======")
if __name__ == "__main__":
main()