案例:
某即时战略游戏,你训练出来各种很强的战士。 为了增加游戏的可玩性,增加了一种复制魔法。实施该魔法,可以复制任意的战士。 你会怎样考虑这个设计? 在继续阅读之前,请先认真思考并写出你的设计,这样对你更好地理解本模式将会更有帮助。分析: 1.无疑增加一个复制的方法能解决这个问题。 2.专门写一个复制类吗?传入一个战士,然后返回一个复制的战士,这样可行吗?这样做有以下问题: 1)游戏还在设计中,战士的品种还会不断演变,每增加一个品种,或者修改某品种的战士,复制类就需要修改代码。 2)为了复制好战士,复制类需要访问战士内部的属性,这样战士类可能需要暴露内部信息。 通过“原型”这两个中文字来理解原型模式是有点难度的,我们往往会用“原型开发”的“原型”来理解。 我们看看英文原型(Prototype)的解释: the first design of something from which other forms are copied or developed.原型模式的要点: 1.利用现成对象制作新的对象。 2.被复制的对象,需要实现clone(克隆)接口:Soldier newSoldier = oldSoldier.Clone();类图如下:![原型1.png](http://www.umlonline.org/school/attachments/09102717570be6747ed5328ea6.png)
说明:
1.每种战士实现自己的复制方法,自己可以访问自己的内部信息,复制起来很方便,也不需要对外暴露内部信息。2.增加或者修改战士的种类,只需要修改该类便可,其它代码不受影响。
请看下一文……
作者:张传波
创新工场创业课堂(敏捷课程)讲师
软件研发管理资深顾问
CMMI首席专家
《火球——UML大战需求分析》作者
《硬啃设计模式》作者
创办人