1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| from typing import Dict, TypeVar, Type import copy
T = TypeVar('T')
class PrototypeRegistry: """原型注册表 - 管理所有原型对象"""
def __init__(self): self._prototypes: Dict[str, object] = {}
def register(self, key: str, prototype: object) -> None: """注册原型""" self._prototypes[key] = prototype print(f"Registered prototype: {key}")
def unregister(self, key: str) -> None: """注销原型""" if key in self._prototypes: del self._prototypes[key]
def clone(self, key: str) -> object: """克隆指定原型""" if key not in self._prototypes: raise ValueError(f"Prototype '{key}' not found") return copy.deepcopy(self._prototypes[key])
class Monster: """游戏怪物类"""
def __init__(self, name: str, health: int, damage: int): self.name = name self.health = health self.damage = damage
def __str__(self) -> str: return f"{self.name}(HP:{self.health}, DMG:{self.damage})"
def prototype_registry_demo(): """原型注册表演示""" registry = PrototypeRegistry()
registry.register("goblin", Monster("哥布林", 50, 10)) registry.register("dragon", Monster("巨龙", 500, 100)) registry.register("skeleton", Monster("骷髅", 30, 5))
goblin1 = registry.clone("goblin") goblin2 = registry.clone("goblin") goblin2.name = "哥布林战士" goblin2.health = 80
dragon = registry.clone("dragon")
print(f"\nCreated monsters:") print(f" {goblin1}") print(f" {goblin2}") print(f" {dragon}")
if __name__ == "__main__": prototype_registry_demo()
|