WEB开发网
开发学院软件开发Python Python设计模式系列之四: 创建型Abstract Factory... 阅读

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())

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:Python 设计模式 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接