gpt4 book ai didi

java - 策略模式: How to make classes with constructors as enums?

转载 作者:行者123 更新时间:2023-12-02 13:25:59 25 4
gpt4 key购买 nike

我正在用 Java 创建一个策略模式。

这是我的策略界面ActivationStrategy.java:

public interface Strategy {
public void strategyAlgo(JTextField textField);
}

我有不同的类来实现该接口(interface)。这些类有一个构造函数,因为它需要传递值。例如:

FirstStrategy.java

public class FirstStrategy implements Strategy{
private JComboBox<String> _comboBox;

public FirstStrategy(JComboBox<String> comboBox) {
_comboBox = comboBox;
}

public void strategyAlgo(JTextField textField) {
textField.addKeyListener(new myKeyHandler(_comboBox, textField));
}

SecondStrategy.java

public class SecondStrategy implements Strategy{
private JPanel _panel;

public secondStrategy(JPanel panel) {
_panel = panel;
}

public void strategyAlgo(JTextField textField) {
addActionHandlerToButton(addButton(_panel));
}

public JButton addButton(JPanel panel) {
JButton button = new JButton("Click me");
panel.add(button);
return button;
}

public void addActionHandlerToButton(JButton okButton) {
Action action = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
System.out.println("Hi");
}
};
button.addActionListener(action);
}
}

现在,我想将类设为枚举。像这样的东西:

public enum strategies {

FIRSTSTRATEGIE(){
@Override
public void strategyAlgo() {
...
}
},
SECONDSTRATEGY(){
@Override
public void strategyAlgo() {
...
}
public JButton addButton(JPanel panel) {
...
}
public void addActionHandlerToButton(JButton okButton) {
...
}
};

public abstract void strategyAlgo();

}

但是构造函数呢?

最佳答案

enum是可行的选择时,我的标准是什么?

  1. 当实例数量在编译时确定时。
  2. 当每个实例的状态在编译时确定时。
  3. 当您的实例不保持可变状态时。

在您的情况下,标准2.不是true。因此,我认为您不应该将您的策略​​建模为enum

关于java - 策略模式: How to make classes with constructors as enums?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com