【发布时间】:2021-08-15 15:38:05
【问题描述】:
起初,我的输入是“在线”或“离线”
如果输入在线,它从在线资源中获取数据,如果它离线,它只从我个人制作的模拟文本文件中获取数据。然后我使用 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);
}
我正在考虑在这里使用策略模式,但是当我搜索谷歌时,人们不习惯将 if/else 语句与策略模式一起使用,这让我对如何将它应用到系统感到困惑.
谁能告诉我我可以申请什么样的设计模式以及如何申请?
如果应用设计模式不是最好的方法,有没有更好的方法呢? (我个人希望避免使用嵌套的 if/else 语句...)
提前致谢!
【问题讨论】:
-
你永远不会摆脱在某个地方拥有那个 if 语句,这只是你把它放在哪里的问题。设计模式不仅仅是使条件消失的魔法。如果您认为添加复杂层会使您的代码更好,那您就错了。
-
也就是说,你可以通过扩展 JFrame 来清理你的代码。然后在 main 中,您只需实例化
JFrame frame = new OnlineFrame()或new OfflineFrame()。 -
@Michael 你的观点很好地体现了务实的反思。我同意(+1)。不过,为了完整起见:“设计模式不仅仅是使条件消失的魔法。” 这并不完全正确。大多数模式通过降低圈复杂度来解决复杂度问题。在这方面的终极金锤是访问者模式,您可以完全消除所有条件。不是你应该,但你可以。
标签: java design-patterns solid-principles facade