在与 Facade 模式协作的同时应用设计模式

问题描述

起初,我有一个“在线”或“离线”的输入

如果输入是在线的,它会从在线资源中获取数据,如果是离线的,它只会从我个人制作的模拟文本文件获取数据。然后我使用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 的适当子类型。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...