![]() |
1
0
这取决于每种类型的事件本身是否具有可以执行的不同行为。 事件对象是否需要不同类型的方法?如果是,使用继承。 如果不是,则使用枚举对事件类型进行分类。 |
![]() |
2
1
我将使用每事件类型的对象解决方案,但我将把常用的接口组合分组到(可能是抽象的)类下,提供它们的 骨架实现 . 这大大减少了由多个接口生成的代码膨胀,但另一方面,增加了类的数量。但是,如果使用得当和合理,就会导致代码更干净。 |
![]() |
3
1
如果决定扩展 特定的类别接口,因为您可能还需要实现另一个类别。 因此,这里有一个建议的方法: 假设您需要为一个特定的类别接口方法使用相同的实现(不管事件如何),您可以为每个类别接口编写一个实现类。 所以你应该:
然后,对于每个事件类,只需指定它实现的类别接口,并保留类别实现类的私有成员实例(因此使用组合而不是继承)。对于每个类别接口方法,只需将方法调用转发到类别实现类。 |
![]() |
4
1
因为我没有真正得到我想要的答案,所以我根据我不太理想的学习经验给出了自己最好的猜测。 事件本身实际上没有行为,而是事件的处理程序有行为。事件只是表示数据模型。 我重新编写代码,将事件视为属性的对象数组,这样我就可以使用Java的新变量参数和自动装箱功能。 通过这种改变,我可以删除大约100个巨大的代码类,并在一个类中的10行代码中完成大部分相同的逻辑。 经验教训:将OO范式应用于数据模型并不总是明智的。在处理大型可变域时,不要集中精力通过OO提供完美的数据模型。OO设计有时比模型更有益于控制器。也不要把重点放在前期优化上,因为通常10%的性能损失是可以接受的,并且可以通过其他方式重新获得。 基本上,我对这个问题过于工程化了。事实证明,在这种情况下,正确的OO设计是多余的,将一个一夜的项目变成了一个3个月的项目。当然,我必须用艰苦的方式去学习! |
![]() |
5
0
仅仅拥有大量的.java文件并不一定是坏事。如果您可以有意义地提取少量(2-4个左右)表示类契约的接口,然后打包所有实现,那么您提供的API可能非常干净,即使有60个实现。 我还建议使用一些委托类或抽象类来引入公共功能。委托和/或抽象帮助器都应该是包私有或类私有的,在您公开的API之外不可用。 |
![]() |
6
0
如果有相当多的混合和匹配行为,我将考虑使用其他对象的组合,然后让特定事件类型对象的构造函数创建这些对象,或者使用生成器创建对象。 也许是这样?
可能会有一些改进,但这可能会让你开始工作。 |
|
user29759326 · 如何返回递归函数中的最后一个值? 6 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 6 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 7 月前 |
![]() |
rudraraj · java中未声明最终变量 7 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 7 月前 |