1
0
Fork 0
design-patterns/python/prototype/main.py

85 lines
1.7 KiB
Python

"""
实例
汤宝宝穿越到了星球大战世界,并掉到了克隆人军队的生产工厂。
"""
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()