假设您有两种类型的对象,一种是从另一种派生而来的,但却添加了一个额外的功能.我可以想到处理这个额外功能的两种方法是在基类上添加一个空方法,该方法总是被调用(派生类可以覆盖此方法)或显式类型检查以查看是否有派生类的实例然后调用额外的方法.
这两个看起来都像黑客,有更好的方法吗?如果不是一个优先于另一个?两种方式都可以工作,但似乎都不是特别干净,一种方法是使用无用的方法存根来污染基类,另一种方法是使用显式类型检查,这通常被认为是一个坏主意.
这是一个清楚我的意思的例子:
public class Weapon { // Should there be an empty StartCharging() here? public virtual void Fire() { // Do something } } public class ChargedWeapon : Weapon { public void StartCharging() { // Do something } public override void Fire() { // Do something base.Fire(); } } public class Game { private Weapon weapon; public void HandleUserinput() { if (MouseButton.Waspressed()) { // Or should there be an if (weapon is ChargedWeapon) here weapon.StartCharging(); } else if (MouseButton.WasReleased()) { weapon.Fire(); } } }
解决方法
最好将方法添加到基类而不是进行类型检查.如果你做了一个类型检查,然后决定实施一种还需要充电的新型武器,会发生什么?你会增加另一个测试条件吗?
编辑:在你的代码中,我看到Strategy Pattern的实现的开始.我想你的用例将从它和State Pattern获得很大的好处.如果你需要更多关于这些的详细信息,请留下评论(因为它们有点偏离最初的问题的观点)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。