设计模式----抽象工厂模式
来源:互联网 发布:电脑优化提速 编辑:程序博客网 时间:2024/06/08 15:56
<pre name="code" class="python">#武器工厂#抽象工厂模式'''抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。''' '''武器工厂生产武器的实例,不同属性的工厂生产不同属性的武器,武器的攻击可以设定,工厂需添加相应武器的类才能生产实例'''class WeaponFactory(object): '''This is an abstract class WeaponFactory''' def __init__(self,weapon = None): self.weapons = {weapon.__name__ : weapon} def createweapon(self,name,attack): pass def addweapon(self,weapon): if self.weapons.has_key(weapon.__name__): raise KeyError("we have had this weapon") self.weapons[weapon.__name__] = weapon def removeweapon(self,name): if not self.weapons.has_key(name): raise KeyError("we don't have this weapon") self.weapons.pop(name) class FireWeaponFactory(WeaponFactory): '''This is a concreate class FireWeaponFactory''' def __init__(self,weapon = None): self.position = 'Fire' WeaponFactory.__init__(self,weapon) def createweapon(self,name,attack = 0): if not self.weapons.has_key(name): raise KeyError("we don't have this weapon") return self.weapons[name](attack,self.position)class WaterWeaponFactory(WeaponFactory): '''This is a concreate class WaterWeaponFactory''' def __init__(self,weapon = None): self.position = 'Water' WeaponFactory.__init__(self,weapon) def createweapon(self,name,attack): if not self.weapons.has_key(name): raise KeyError("we don't have this weapon") return self.weapons[name](attack,self.position)class Weapon(object): '''This is an abstract class Weapon''' def __init__(self,attack = 0,position = None): self._attack = attack self._position = position @property def attack(self): return self._attack @attack.setter def attack(self,value): raise ValueError("you can't set attack") @attack.deleter def attack(self): raise AttributeError("you can't delete attack") @property def position(self): return self._position @position.setter def position(self,value): raise ValueError("you can't set position") @position.deleter def position(self): raise AttributeError("you can't delete position")class Bow(Weapon): '''a class Bow''' def __str__(self): return Bow.__name__class Sword(Weapon): '''a class Sword''' def __str__(self): return Sword.__name__class Gun(Weapon): '''a class Gun''' def __str__(self): return Gun.__name__if __name__ == '__main__': mf = FireWeaponFactory(Bow) mbow = mf.createweapon('Bow',120) mf.addweapon(Sword) msword = mf.createweapon('Sword',170) mw = WaterWeaponFactory(Bow) ybow = mw.createweapon('Bow',190) #mf.removeweapon('Sword') print mbow.attack print mbow.position print '--'*30 print msword.attack print msword.position print '--'*30 print ybow.attack print ybow.position print '--'*30 print mf.createweapon('Sword',210)
0 0
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- 博客园app小项目有源码--在百度手机助手上线
- JQuery日记6.7 Javascript异步模型(二)
- 生活学习规划
- js格式化时间
- 第十五周(项目二)——用文件保存学生的名单。
- 设计模式----抽象工厂模式
- 使用 lsof 查找打开的文件
- Socket通信实验总结
- 广义互相关求信号时延 JAVA实现
- n 个元素顺序入栈,则可能的出栈序列有多少种?
- leetcode——Longest Substring Without Repeating Characters 求链表中无重复字符的最大字串长度(AC)
- All in All
- POJ3254 Corn fiedls
- void用法的总结