问题描述
如果输入是在线的,它会从在线资源中获取数据,如果是离线的,它只会从我个人制作的模拟文本文件中获取数据。然后我使用swing在GUI上显示结果。
所以一开始,我的主要方法是这样的:
public static void main(String[] args) {
if(args[0].equalsIgnoreCase("online")) {
JFrame frame = new JFrame("Online");
JTextField...
...
} else if(args[0].equalsIgnoreCase("offline")) {
JFrame frame = new JFrame("Offline");
JTextField...
...
}
}
为了隐藏系统的复杂性,我使用了一种设计模式。
应用外观
public static void main(String[] args) {
Facade facade = new Facade();
if(args[0].equalsIgnoreCase("online")) {
facade.online();
} else if(args[0].equalsIgnoreCase("offline")) {
facade.offline();
}
}
但问题是,我现在还有一个输入,它是“pdf”或“txt”,它将决定数据的输出应该存储在哪个文件扩展名中。
所以我想在这里实现的是,我想应用一种设计模式来覆盖第二个输入,同时保持外观模式。
我想要的主要方法是:
public static void main(String[] args) {
SomeRandomDesignPattern pattern = new SomeRandomDesignPattern();
pattern.execute(args);
}
我想在这里使用 Strategy 模式,但是当我搜索 google 时,人们不习惯将 if/else 语句与 Strategy 模式一起使用,这让我对如何将其应用于系统感到困惑.
谁能告诉我我可以申请什么样的设计模式以及如何申请?
如果应用设计模式不是最好的方法,有没有更好的方法呢? (我个人想避免使用嵌套的 if/else 语句...)
提前致谢!
解决方法
考虑您的希望示例:
public static void main(String[] args) {
SomeRandomDesignPattern pattern = new SomeRandomDesignPattern();
pattern.execute(args);
}
不是 new
调用 pattern
对象,而是将该责任委托给辅助方法:
public static void main(String[] args) {
SomeRandomDesignPattern pattern = new create();
pattern.execute(args);
}
其中 create
可以像私有辅助方法一样简单。
现在将 args
从 execute
移到辅助方法:
public static void main(String[] args) {
SomeRandomDesignPattern pattern = new create(args);
pattern.execute();
}
现在您有了一个众所周知的模式:Command。您所要做的就是重命名事物:
public static void main(String[] args) {
Command command = new create(args);
command.execute();
}
create
辅助方法可以查看 args
以选择要返回的 Command
的适当子类型。