代码示例

 

用的还是MazeGame的例子。

首先定义一个MazeFactory的子类MazePrototypFacoty,这个继承关系本身是抽象工厂模式。

 

Aha!设计模式(34)-原型(8)_原型模式

 

这个子类使用原型模式构建产品,其构造函数如下:

 

Aha!设计模式(34)-原型(8)_子类_02

在构建产品时,使用原型的Clone方法。

 

Aha!设计模式(34)-原型(8)_子类_03

 

代码中使用Initialize/setNumber方法来修改克隆之后对象的属性。这种情况在实际的开发中经常发生。

 

在使用MazePrototypeFactory构建游戏的时候,只需要替换原型就可以生成不同的游戏。

 

Aha!设计模式(34)-原型(8)_设计模_04

除了原型的类型之外,其他一切都相同。作为原型模式的一部分,每个原型都要支持Clone方法。以下是Door的情况:

 

Aha!设计模式(34)-原型(8)_示例代码_05

Aha!设计模式(34)-原型(8)_设计模_06

 

当我们需要扩展产品类型的时候,必须同时定义Clone方法。以下是BombedWall的例子:

 

Aha!设计模式(34)-原型(8)_示例代码_07

Aha!设计模式(34)-原型(8)_设计模_08

需要注意的是,新的Clone方法虽然返回的是基类类型的变量,实际生成的对象确实子类类型的。

 

示例代码

 

示例代码都已在QT上编译通过,可以从以下地址下载:

 

​https://github.com/xueweiguo/OOThinking/tree/master/Aha!DesignPattern/Prototype​

 

作者一句话

 

学习包含两个活动:学是模仿,习是练习。缺一不可。

练习有两个窍门:一个是尽早,一个是要尽量贴近实战。

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

Aha!设计模式(34)-原型(8)_子类_09