我正在努力保持Java Swing代码的清洁。我认为一种方法是尝试将侦听器逻辑与GUI的其余部分隔离开来。
我现在要做的是将有关侦听器的所有功能分离到与GUI的主JFrame分开存在的单个类/对象中,以便它可以成为保存侦听器并启动侦听器的中心位置。将这些分配给组件的逻辑。
这样,GUI可以被分成一个哑部分(JFrame A包含/显示JPanel B,C,D等),它在组件执行时如何交互之间没有逻辑,而一个智能部分保持逻辑。
基本上,我正在考虑实施以下内容:
- ListenerAssigner类包含应用程序中用作内部类的所有侦听器,实例化它们并在内部将其保存为ArrayList。它包含对JFrame的引用。它不是JFrame的内部,而是外部的。
- 所有侦听器都将包含实例化的枚举值。这将用于将自身与需要侦听器的对象的枚举值进行比较。
- ListenerAssigner在JFrame上调用自定义方法(通过接口添加),以将侦听器的ArrayList传递给需要侦听器的对象。
- JFrame依次调用其内部成员的自定义方法,将ArrayList传递给其内部对象,然后重复这些对象。
- 持有需要侦听器的对象的对象将在对象上调用findAndSetListener方法,并将ArrayList传递给它们。
- 对象通过迭代侦听器列表,获取其枚举值,将这些值与侦听器的枚举值进行比较,并在侦听器匹配时将该侦听器分配给自身来实现findAndSetListener。我们通过for循环中的if语句来避免非常长的switch语句。
这种方式监听器是动态分配的,并且都包含在一个部分中,而不是遍布GUI的不同部分。
这种方法看起来有效吗?这是否遵循SOLID原则和简洁的编码方法,或者我是否应该放弃尝试将听众逻辑保持在一个地方?