【发布时间】:2021-07-19 10:16:00
【问题描述】:
我想知道什么是简化以下 sn-p 代码的优雅而有效的方法。由于我有更多按钮,并且它们的机制都以相同的方式运行,因此方法的对称性以及与
color.green -> color.red的交替表明可能存在一种将其简化为函数的方法?
我一直在为这个设计问题摸不着头脑,我编写它的方式似乎肯定是错误和麻烦的。
GameFrame 类
public class GameFrame extends JFrame{
// (...)
static void initializeComponents(GameFrame frame, GamePanel GamePanel) {
// (...)
ArrayList<JGradientButton> buttons = new ArrayList<JGradientButton>();
Collections.addAll(buttons, b1,b2,b3,b4,b5);
for(JGradientButton button : buttons) {
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(button == b1) {
GamePanel.b1Pressed();
} else if (button == b2) {
GamePanel.b2Pressed();
if(GamePanel.removeFlag) {
button.color = Color.green;
} else {
button.color = Color.red;
}
button.repaint();
} else if (button == b3) {
GamePanel.b3Pressed();
if(!GamePanel.collisionFlag) {
button.color = Color.green;
} else {
button.color = Color.red;
}
button.repaint();
} else if (button == b4) {
GamePanel.b4Pressed();
if(!GamePanel.electricFlag) {
button.color = Color.green;
} else {
button.color = Color.red;
}
button.repaint();
} else {
GamePanel.b5Pressed();
if(!GamePanel.gravityFlag) {
button.color = Color.green;
} else {
button.color = Color.red;
}
button.repaint();
}
}
});
}
// (...)
}
我对上述方法不满意,因为我有很多按钮,而且它们交替的代码很容易占用大约 100 行代码。交替的对称性向我表明,这种设计可能存在更好的方法。
我曾尝试编写一个采用buttons 列表的函数,但我们用actionPerformed 覆盖这一事实让我很困惑,我不知道是否真的存在简化这一点的方法。
【问题讨论】:
标签: java design-patterns simplification