代码示例
用的还是MazeGame的例子。
首先定义一个MazeFactory的子类MazePrototypFacoty,这个继承关系本身是抽象工厂模式。
这个子类使用原型模式构建产品,其构造函数如下:
在构建产品时,使用原型的Clone方法。
代码中使用Initialize/setNumber方法来修改克隆之后对象的属性。这种情况在实际的开发中经常发生。
在使用MazePrototypeFactory构建游戏的时候,只需要替换原型就可以生成不同的游戏。
除了原型的类型之外,其他一切都相同。作为原型模式的一部分,每个原型都要支持Clone方法。以下是Door的情况:
当我们需要扩展产品类型的时候,必须同时定义Clone方法。以下是BombedWall的例子:
需要注意的是,新的Clone方法虽然返回的是基类类型的变量,实际生成的对象确实子类类型的。
示例代码
示例代码都已在QT上编译通过,可以从以下地址下载:
https://github.com/xueweiguo/OOThinking/tree/master/Aha!DesignPattern/Prototype
作者一句话
学习包含两个活动:学是模仿,习是练习。缺一不可。
练习有两个窍门:一个是尽早,一个是要尽量贴近实战。
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】