(這個問題是更多的誰有權訪問本書的人,很難把它放到上下文另有)四人幫的實現原型模式的
我已經通過了四人幫的「設計模式」閱讀這本書,有一句話讓我有點困惑,'Creational Patterns-> Prototype->示例代碼'(第124頁)。
接近頁面的底部,有一個BombedWall
的implemententation,這是我的理解是一個具體的原型,因爲它從Wall
繼承,並重新定義了Clone()
虛函數。 BombedWall
還定義了另一個方法,HasBomb()
,對於使用常規Wall
接口的任何客戶端是未知的。
是BombedWall
存儲在MazePrototypeFactory
(原型客戶端)的唯一方法是爲Wall*
(從BombedWall::Clone
返回),唯一的方式去HasBomb()
事後,據我瞭解,是垂頭喪氣上執行即Wall*
到BombedWall*
(動態還是靜態,取決於我是否知道該類型),然後我可以訪問HasBomb()
方法。
這一切對我來說都很好,但隨後後作者說(同一頁,最後一句,第二個最後一段):
「客戶永遠也不應該的
Clone
返回值向下轉換 所需的類型」
什麼?那我該怎麼去HasBomb()
?
我必須失去了一些東西......
[這裏](http://www.nileshgule.com/2012/06/prototype-design-pattern.html)是使用接口的原型設計模式的實現。即使沒有子類化,我們也可以通過使用原型對象來創建一個實例。 –