Java 扩展类来存储附加信息是一种好的做法吗?

Java 扩展类来存储附加信息是一种好的做法吗?,java,swing,oop,inheritance,extends,Java,Swing,Oop,Inheritance,Extends,我想知道扩展在第一时间创建的类是否是一种好的做法,这些类不需要扩展就可以使用,只是为了添加一些您将在以后的应用程序中使用的信息 例如,我使用SwingJavaAPI为正在开发的应用程序创建GUI。在构建它的过程中,我需要创建一个JTable,根据用户的操作,该模型在运行时会被更改多次。因此,我有三种不同的模型,可以根据情况应用于JTable。也就是说,在我的应用程序中,我意识到如果我可以扩展JTable并创建另一个类,该类内部将有一个Enum(或任何其他类型),可以在我检查JTable时为我提供

我想知道扩展在第一时间创建的类是否是一种好的做法,这些类不需要扩展就可以使用,只是为了添加一些您将在以后的应用程序中使用的信息

例如,我使用SwingJavaAPI为正在开发的应用程序创建GUI。在构建它的过程中,我需要创建一个JTable,根据用户的操作,该模型在运行时会被更改多次。因此,我有三种不同的模型,可以根据情况应用于JTable。也就是说,在我的应用程序中,我意识到如果我可以扩展JTable并创建另一个类,该类内部将有一个Enum(或任何其他类型),可以在我检查JTable时为我提供哪个模型在JTable上处于活动状态,那么对我来说会容易得多。因此,我的问题是:例如,扩展JTable,仅仅添加包含可能对应用程序中的访问有用的信息的字段,这是一种好的做法吗?对我来说,将这些信息直接保存在JTable中并在我有权访问JTable时访问它会容易得多


这是一种好的做法吗?可怕的做法?你的意见是什么?谢谢

是的,用这种方式扩展类是很好的java


如果一个类不打算被扩展,它应该被声明为final。

是的,用这种方式扩展类是很好的java


如果一个类不打算被扩展,它应该被声明为final。

这取决于您的应用程序业务需求和体系结构策略,但这是一种常见的设计模式,具有
Decorator
模式


这取决于您的应用程序业务需求和体系结构策略,但这是
装饰器
模式的常见设计模式


假设M-V-C或模型视图控制程序结构,或与此相当接近的结构

…创建一个JTable,根据用户所做的操作,该模型将在运行时更改多次。因此,我有三种不同的模型,可以根据情况应用于JTable

关键是:到底是什么在改变?JTable还是它的TableModel?如果使用TableModel,我将避免对JTable进行子分类

也就是说,在我的应用程序中,我意识到如果我可以扩展JTable并创建另一个类,该类内部将有一个Enum(或任何其他类型),可以在我检查JTable时为我提供哪个模型在JTable上处于活动状态,那么对我来说会容易得多

这似乎混淆了视图和模型。TableModel信息应该是程序模型的一部分,如果它发生了更改,您可以让模型将更改通知侦听器

因此,我的问题是:例如,扩展JTable,仅仅添加包含可能对应用程序中的访问有用的信息的字段,这是一种好的做法吗?对我来说,将这些信息直接保存在JTable中并在我有权访问JTable时访问它会容易得多


在这种情况下,我不会将JTable子类化,而是会有重大的状态更改,它们的通知是主程序模型的一部分,而不是它的视图(正如您所尝试的那样)。

假设一个M-V-C或模型视图控制程序结构,或者与此相当接近的东西

…创建一个JTable,根据用户所做的操作,该模型将在运行时更改多次。因此,我有三种不同的模型,可以根据情况应用于JTable

关键是:到底是什么在改变?JTable还是它的TableModel?如果使用TableModel,我将避免对JTable进行子分类

也就是说,在我的应用程序中,我意识到如果我可以扩展JTable并创建另一个类,该类内部将有一个Enum(或任何其他类型),可以在我检查JTable时为我提供哪个模型在JTable上处于活动状态,那么对我来说会容易得多

这似乎混淆了视图和模型。TableModel信息应该是程序模型的一部分,如果它发生了更改,您可以让模型将更改通知侦听器

因此,我的问题是:例如,扩展JTable,仅仅添加包含可能对应用程序中的访问有用的信息的字段,这是一种好的做法吗?对我来说,将这些信息直接保存在JTable中并在我有权访问JTable时访问它会容易得多


在这种情况下,我不会将JTable子类化,而是会有重大的状态更改,并且它们的通知是主程序模型的一部分,而不是它的视图(正如您所尝试的那样)。

如果您能给出一个示例,那将很好,但我认为扩展类以添加信息没有任何问题。虽然,这可能不是必要的,如果它能帮助你,听起来还不错。如果你说的是约定方面的,我不确定,但我再次强调,我认为这会很好,但是如果你说的是性能方面的,它应该不会影响太多,但是需要测试来验证。也许你正在考虑使用装饰设计模式?虽然这对您正在做的事情来说可能有些过分——我说不出来,因为我不完全理解您的实际代码和问题。阅读您的评论,我开始认为这样做并不可怕,但应该只在真正必要时使用。我说得对吗?在我前面描述的情况下,我有机会解决这个问题,当然不需要对JTable进行子类化。但是,再一次,如果我对它进行子类化,我想它会大大减少我的工作量。所以,在你看来,每当你发现它有用或者你认为只有在真正必要的时候才使用它更好时,这是一个很好的实践