【发布时间】:2018-04-11 00:20:35
【问题描述】:
我正在使用 OOP 语言 (C++)。我有一个名为 Terrain 的基类。在我的世界里,Terrain 的每一个子类——Forest、Grass、Desert 等等——继承了 Terrain 的所有方法并且没有覆盖任何东西。子类所做的一切,基类都会做。在意识到我可以设想子类所做的一切都可以由基类完成之后,这样做似乎是浪费精力。
这是否意味着我应该放弃继承并使用不同的方法?我最初的想法是使用工厂模式来生成地形对象,并使用子类在其构造函数中的分配来构造它们。例如,工厂会将“沙漠”作为输入参数。并生成一个带有沙质纹理的地形对象,添加一些仙人掌,设置干燥属性等。但是,这并不是一个完美的解决方案。例如,使用此方法,您无法根据类型区分沙漠或草,或任何此类对象。
【问题讨论】:
-
工厂模式和继承并不矛盾。您还没有从使用继承模型中受益,但将来当您的地形类型开始彼此不同时,您可能会受益。
标签: oop inheritance language-agnostic factory-pattern