首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GoF原型模式的实现

GoF原型模式的实现
EN

Stack Overflow用户
提问于 2011-08-30 13:34:12
回答 2查看 466关注 0票数 4

(这个问题更适合那些能接触到这本书的人,否则很难把它放在上下文中)

我一直在阅读GoF的“设计模式”(Design)一书,在“Creational>Prototype->Sample代码”(第124页)下面有一个句子让我有点困惑。

在页面底部附近,有BombedWall的实现,据我所知,它是一个具体的原型,因为它继承了Wall,并重新定义了Clone()虚拟函数。BombedWall还定义了另一个方法,HasBomb(),任何使用常规Wall接口的客户端都不知道它。

BombedWall存储在MazePrototypeFactory (原型客户端)中的唯一方法是作为一个Wall* (从BombedWall::Clone返回),而且据我所知,在此之后访问HasBomb()的唯一方法是将该Wall*降为BombedWall* (动态还是静态,取决于我是否知道该类型),然后我可以访问HasBomb()方法。

这一切在我看来都很好,但后来作者说(同样的一页,最后一句,第二段):

“客户端永远不必将Clone的返回值降到所需的类型”

什么?那我该怎么去HasBomb()

我一定是遗漏了什么..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-30 13:47:29

我给出了答案,现在完全重写了:)

基本上,MazePrototypeFactory只知道它可以使用的基类。它不知道你将要创建的任何子类,但是它仍然能够将任何可能的子类放到迷宫中。

该模式基本上确保MazeFactory将获得它理解的类型的指针,即Wall,而不是需要修改MazeFactory以生成所有子类的对象。

MazeFactory是第124页中提到的客户端。它不需要了解HasBomb来建立迷宫。

票数 1
EN

Stack Overflow用户

发布于 2011-08-30 14:00:33

我的猜测是,这种方法的存在只是为了表明BombedWall是一个具有扩展公共接口的不同类。Hovewer,此接口不用于示例上下文:迷宫构建算法不区分墙壁类型,而其他子系统(例如渲染引擎)可能会这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7244030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档