在与 Facade 模式协作的同时应用设计模式
Applying design patterns whilst collaborating with Facade pattern
起初,我的输入是“在线”或“离线”
如果输入是在线的,它从在线资源中获取数据,如果是离线的,它只是从我个人制作的模拟文本文件中获取数据。然后我使用 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
到return的子类型。
起初,我的输入是“在线”或“离线”
如果输入是在线的,它从在线资源中获取数据,如果是离线的,它只是从我个人制作的模拟文本文件中获取数据。然后我使用 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
到return的子类型。