我正在研究Java swing应用程序。没有大图形。 Just Frames和jcombos,jtexts,jlists等对话框。我已经看到了定制的jcomboboxes或jtextfields以及一些特定于应用程序的自定义功能。每个类型的jcomponent的每个自定义类将在整个应用程序中使用。但我认为是 - 让被显示在应用程序为每个组件单独的类,并处理好与他们在自己的类相关联的functionlity ...而不是在应用程序中使用一个定制类的所有Jcombos的,我想着使用seaparate类用于单独的jcombos ...可能需要数千个类来显示尽可能多的元素(JComponents)。
例如:如果在一个JDialog我有5Jcombos,3个JTextField的,2JCheckboxes - 我计划写延伸的JComboBox,延伸JTextField的3自定义类,2自定义类延伸JCheckBoxes 5自定义类。
这是一件好事吗?我不知道设计模式和东西。这可行吗? 已经采用了这种方法吗?
答案 0 :(得分:1)
不,这不是一件好事。
我参与了一个项目(多年),试图完全按照你的建议去做。成千上万的课程将大大降低您的申请速度,并使您的代码极难理解和维护。
通常,除非要更改其行为,否则不应该对任何Swing组件进行子类化。如果你可以使用组件的公共方法做你想做的事情,你肯定不应该对它进行子类化。一个类(Swing或其他)不应仅仅因为想要使用它而扩展。
答案 1 :(得分:0)
我认为为每个用例编写一个类并不是一个好主意,但是做一些通用的东西可能会更好。 我曾经开发过Swing应用程序,其中我的表有一些特定的样式。所以,那时我决定使用Decorator模式(我添加了一些额外的样式,调整JTable)以及我需要使用我使用这个类的表的所有地方。 如果您不了解设计模式,那么可能会不时地浏览它们,以便您随时使用它们......此外,我建议使用基本原理:低耦合和高内聚 - 简而言之:尝试让类不要与其他资源有很多依赖关系,这会使你的代码更加可维护并尝试在你的类中做一个特定的工作:不要在同一个类中混合不同的范围......
这只是我的主观意见。祝你好运!
答案 2 :(得分:0)
是的,就像其他人已经说过的那样,尽可能使用构图而不是继承。但是,既然你说你不熟悉设计模式,我想知道你是否在这里问一个稍微不同的问题。
您是否有机会询问将您的事件监听器放在哪里?即是否在对话框中为所有JComboBox提供了一个怪异的事件监听器,可能有一个switch语句,或者每个组合框有一个具体的事件监听器类?如果这是你要问的,那么现代模式就是后者。是的,你可能想要为每个组件创建一个单独的监听器类(或者如果你正在监听不同的事件,那么就是一些监听器类) - 只有这些是内部类,最好放在你正在设计的主要组件中。
我强烈推荐Eclipse附带的Window Builder,它是WYSIWYG并生成合适的OO代码,教你良好的设计模式,同时可以自定义。