更新各个设计模式示例,添加工厂方法、原型和单例模式的实现,重构相关代码并增强可读性
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user