Java扩展了问题
|
我有一系列的类和扩展:
Class Base1{ .... }
Class Base1Extend1 extends Base1 {.....}
Class Base1Extend2 extends Base1 {......}
我现在有另一套使用这些的:
Class Base2 {
Base1 base1;
}
Class Base2Extend1{
base1 = new Base1Extend1();}
Class Base2Extend1{
base1 = new Base1Extend2();}
现在,Base2在Base1的实例化上执行一些工作。
此外,Base2Extend1和Base2Extend2需要在其特定的扩展类上执行工作。例如,它们调用仅存在于子类中的特定方法。有什么方法可以不必在Base2的扩展类中每次都使用cast?
确切的情况是这样的:
它是一种纸牌游戏,具有两种类型的玩家:用户和“计算机”。
有很多基本方法适用于这两种方法(pickupCards(),discardCards()等)。
然后有一些仅针对用户的方法(checkMove()等)和特定于\“ computer \”的方法(doTurn()等)。
接下来是对象playerHand,用于存放用户的卡。
再次有一些处理手的基本方法(addCards(),removeCards()等)。
然后,有仅用于用户手的特定方法(checkCards()等)和特定于\“ computer \”的方法(decideWhatToDo()等)。
现在,我认为仅将这些类合并在一起可能会更正确。
使Base1和Base2成为一个类,然后对子类进行等效合并。
没有找到相关结果
已邀请:
4 个回复
犁攀富
现在,您可以通过这种方法获得以下收益: 与游戏规则和计分有关的所有事物都集中在一个地方,这是GameController中唯一的事物。非常容易掌握和维护。 CPU AI也是如此。一切都集中在一个地方,CPUController中唯一的东西就是AI实现。 无论您使用的是人与CPU,CPU与CPU还是人与人,从外部控制器都是完全相同的。如果您想要多人游戏,那么您唯一需要在此处进行更改的就是主循环(这是一个微不足道的更改)。 如果您想实现另一种招人喜欢的游戏,则可能唯一要更改的就是GameController(不同的规则)和CPUController(不同的AI)。 如果您想要AI的另一种实现(例如一种更智能的算法),则可以仅替换CPUController来实现。 最后两种情况是继承有意义的情况。您希望CPUController和GameController具有相同的接口(每个接口当然都不同),以便主循环和Player可以与不同的控制器实现无缝地配合工作。 如果您想进一步了解这些设计原则,请使用google for SOLID。这个例子到处都是。 :-)
氏脑
磁辫覆氓
缮淳彼誊