在与 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 可以像私有辅助方法一样简单。

现在将 argsexecute 移动到辅助方法:

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的子类型。