代码示例

 

用的还是MazeGame的例子。

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

 

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

 

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

 

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

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

 

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

 

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

 

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

 

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

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

 

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

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

 

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

 

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

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

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

 

示例代码

 

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

 

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

 

作者一句话

 

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

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

 

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

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

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

相关文章:

  • 2021-10-01
  • 2021-06-27
  • 2021-06-17
  • 2021-05-01
  • 2021-05-21
  • 2021-05-14
  • 2021-11-19
  • 2021-06-27
猜你喜欢
  • 2021-04-13
  • 2021-07-06
  • 2021-08-26
  • 2021-11-18
  • 2021-09-12
  • 2021-11-25
  • 2022-01-07
相关资源
相似解决方案