Python设计模式系列之四: 创建型Abstract Factory模式
2007-03-30 12:56:31 来源:WEB开发网核心提示: WiseMonster则是Monster的另一个具体实现,它用来代表高难游戏级别中的怪兽对象,Python设计模式系列之四: 创建型Abstract Factory模式(7),其完整的代码如清单9所示,代码清单9:wisemonster.pyfrom monster import *cla
WiseMonster则是Monster的另一个具体实现,它用来代表高难游戏级别中的怪兽对象,其完整的代码如清单9所示。
代码清单9:wisemonster.py
from monster import *
class WiseMonster(Monster):
""" 高难级别中怪兽对象的具体实现 """
# 构造函数
def __init__(self):
print "A WiseMonster is created."
self.vitality = 90
self.intelligence = 80
# 获取体能的具体实现
def getVitality(self):
return self.vitality
# 获取智力的具体实现
def getIntelligence(self):
return self.intelligence
从整个游戏的体系结构中不难看出, Soldier 、 SillySoldier 和 WiseSoldier 三者共同构成了一个产品等级结构,而Monster、SillyMonster和WiseMonster则构成了另外一个产品等级结构。这样一来,整个游戏中就出现了三个等级结构:一个工厂等级结构和两个产品等级结构,并且工厂等级结构与产品等级结构完全平行,这是应用抽象工厂模式时最典型的环境。
通过运用抽象工厂模式,客户端在使用时只要创建具体工厂的实例,然后调用工厂对象中的工厂方法,就可以得到所需的产品对象,从而避免了对具体产品对象的实例化操作,其示例性代码如清单10所示。
代码清单10:game.py
import sys
from sillyenemyfactory import *
from wiseenemyfactory import *
# 主函数
if (__name__ == "__main__"):
args = sys.argv
# 根据游戏等级生成具体工厂
if ("silly" in args):
factory = SillyEnemyFactory()
elif ("wise" in args):
factory = WiseEnemyFactory()
else:
print "Usage: python game.py silly|wise"
exit
# 通过具体工厂创建士兵和怪兽
soldier = factory.createSoldier()
monster = factory.createMonster()
# 获得士兵和怪兽的当前状态
print "Soldier speed is %d" %(soldier.getSpeed())
print "Soldier weapon is %s" % (soldier.getWeapon())
print "Monster vitality is %d" % (monster.getVitality())
print "Monster intelligence is %d" % (monster.getIntelligence())
更多精彩
赞助商链接