Java:扩展一个类,而不是在太多的类中执行相同的逻辑。利与弊?

Java:扩展一个类,而不是在太多的类中执行相同的逻辑。利与弊?,java,Java,有一个用于创建特定对象的逻辑和属性。这种逻辑将在几节课上重复。像一些模板逻辑。e、 假设我正在创建一个模板来创建类似枚举的对象,这基本上需要在构造函数中设置int并通过方法获取值 有两种方法可以做到这一点 创建一个包含这两种逻辑的模板超类,并在需要创建类似枚举的对象时扩展它 在任何地方创建并重新写入两个逻辑 记住内存和代码性能,哪种选项更可取。它的优点和缺点是什么?因为内存消耗和性能总是仅次于可读性和可维护性 如果我是你,我会坐下来思考逻辑在哪里,然后把它放在那里。例如,您可以问自己,对于第一次

有一个用于创建特定对象的逻辑和属性。这种逻辑将在几节课上重复。像一些模板逻辑。e、 假设我正在创建一个模板来创建类似枚举的对象,这基本上需要在构造函数中设置int并通过方法获取值

有两种方法可以做到这一点

  • 创建一个包含这两种逻辑的模板超类,并在需要创建类似枚举的对象时扩展它

  • 在任何地方创建并重新写入两个逻辑


  • 记住内存和代码性能,哪种选项更可取。它的优点和缺点是什么?

    因为内存消耗和性能总是仅次于可读性和可维护性

    如果我是你,我会坐下来思考逻辑在哪里,然后把它放在那里。例如,您可以问自己,对于第一次阅读我的代码的人,哪种解决方案对我来说最容易辩护

    如果逻辑类型跨越所有子类(即,如果不处理该逻辑就无法扩展该类),则将其放入超级类中

    如果该逻辑确实特定于所有子类,则将其放入子类中

    如果你选择后面的内容,请考虑用这样的方式编写它,这样就可以在超级类中通过<强>抽象方法<强>实现逻辑。



    (顺便说一句,您的问题和enum标记并不十分清楚。您不能在Java中在运行时实例化enum。)

    因为内存消耗和性能总是仅次于可读性和可维护性

    如果我是你,我会坐下来思考逻辑在哪里,然后把它放在那里。例如,您可以问自己,对于第一次阅读我的代码的人,哪种解决方案对我来说最容易辩护

    如果逻辑类型跨越所有子类(即,如果不处理该逻辑就无法扩展该类),则将其放入超级类中

    如果该逻辑确实特定于所有子类,则将其放入子类中

    如果你选择后面的内容,请考虑用这样的方式编写它,这样就可以在超级类中通过<强>抽象方法<强>实现逻辑。



    (顺便说一句,您的问题和enum标记并不十分清楚。您不能在Java中在运行时实例化enum。)

    这感觉像是单一责任原则的领域。您所说的似乎是建议您将功能提取到另一个类中,并将其组合到相应的对象中(即每个对象都有一个“helper”对象,或者所有对象都引用同一个helper对象)。扩展不是重用代码的唯一方法

    这感觉像是单一责任原则的领域。您所说的似乎是建议您将功能提取到另一个类中,并将其组合到相应的对象中(即每个对象都有一个“helper”对象,或者所有对象都引用同一个helper对象)。扩展不是重用代码的唯一方法

    你的问题太模糊了,除了最一般的答案外,任何人都无法提供任何答案。也许您可以提供一些示例代码或更详细的问题域描述。一般来说,重复使用而不是代码重复显然更好。当且仅当某个类型与“is-a”关系相关时,您可以用另一个类型扩展某个类型。你在这里的描述似乎不是这样的1.你的问题太模糊了,除了最一般的答案外,任何人都无法提供任何东西。也许您可以提供一些示例代码或更详细的问题域描述。一般来说,重复使用而不是代码重复显然更好。当且仅当某个类型与“is-a”关系相关时,您可以用另一个类型扩展某个类型。您在这里的描述似乎不是这样的..我听说在J2SE5.0之前没有枚举。如果我的目标j2se低于这个值,并且我想给一个类一个枚举行为,那么我必须手动编写代码。。。。我希望这个问题对你来说足够清楚。对于标签,是的,我正在移除它,谢谢你指出OK,我明白了。在运行时创建enum对象似乎仍然是个坏主意。在这种情况下,我强烈建议您使用私有构造函数/工厂方法,并确保每个常量只有一个实例。1.5于2004年推出,并在一段时间前完成了其使用寿命结束期。我认为将目标定为1.4的唯一合理理由是,如果您仍想在JavaME上工作。@aioobe:根据您的说法,我应该选择选项2。在每节课上写同样的逻辑,我的解释正确吗?@PrashamTrivedi,这最终取决于你的判断。我不能说对于第一次阅读你的代码的人来说,你最容易为哪一个决定辩护……我听说在J2SE5.0之前,Enum是不存在的。如果我的目标j2se低于这个值,并且我想给一个类一个枚举行为,那么我必须手动编写代码。。。。我希望这个问题对你来说足够清楚。对于标签,是的,我正在移除它,谢谢你指出OK,我明白了。在运行时创建enum对象似乎仍然是个坏主意。在这种情况下,我强烈建议您使用私有构造函数/工厂方法,并确保每个常量只有一个实例。1.5于2004年推出,并在一段时间前完成了其使用寿命结束期。我认为将目标定为1.4的唯一合理理由是,如果您仍想在JavaME上工作。@aioobe:根据您的说法,我应该选择选项2。在每节课上写同样的逻辑,我的解释正确吗?@PrashamTrivedi,这最终取决于你的判断。我不能说你会做出什么决定