gpt4 book ai didi

c++ - GoF对Prototype模式的实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:40 27 4
gpt4 key购买 nike

(这个问题更多的是给接触过这本书的人,否则很难把它放在上下文中)

我一直在阅读 GoF 的“设计模式”一书,在“Creational Patterns->Prototype->Sample code”下有一句话让我有点困惑 em>(第 124 页)。

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

BombedWall 的唯一途径存储在 MazePrototypeFactory (原型(prototype)客户端)作为 Wall* (从 BombedWall::Clone 返回),也是到达 HasBomb() 的唯一途径之后,据我所知,就是对 Wall* 进行悲观处理。到 BombedWall* (动态或静态,取决于我是否知道类型),然后我可以访问 HasBomb()方法。

我觉得这一切都很好;但是 后来 作者说(同一页,最后一句话,倒数第二段):

"Clients should never have to downcast the return value of Clone to the desired type"

什么?那我怎么去HasBomb()

我一定是漏掉了什么...

最佳答案

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

基本上,MazePrototypeFactory 只知道它可以使用的基类。它对您要创建的任何子类一无所知,但它仍然应该能够将任何可能的子类放入迷宫中。

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

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

关于c++ - GoF对Prototype模式的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com