代码之家  ›  专栏  ›  技术社区  ›  Amit

为java项目选择设计模式时遇到的问题

  •  0
  • Amit  · 技术社区  · 14 年前

    我正在开发一个Java桌面应用程序。从Swing GUI,用户通过5个复选框输入5个输入,如下所示:

    复选框1: 刮取名称

    复选框3: 刮掉电话号码

    复选框4:

    复选框5: 刮国

    我做了5个函数,每个复选框对应一个。

    public static String getName(String pageContent) {
        ...
    }
    
    public static String getAddress(String pageContent) {
        ...
    }
    
    :
    :
    

    public static void main(String [] args) {
    
        List<String> list = new ArrayList<String>();
    
        ...
        code to populate the list
        ...
    
        String name = null;
        String address = null;
        String phone = null;
        String state = null;
        String country = null;
    
    
        for(String pageContent : list) {
    
            if(CheckBox1.isSelected()) {
                name = getName(pageContent);
            }
    
            if(CheckBox2.isSelected()) {
                address = getAddress(pageContent);
            }
    
            ...
            similar code for the remaining 3 methods
            ...
            code to store the data in variables (name, address...) in the database
            ...
        }
    }
    

    现在,实际中,复选框的数量大约是20个,用户可以选择保存其配置,这样就不需要为后续的刮取而反复选择自己的选项。他只需加载配置(存储在.xml文件中)并开始抓取。

    所以,我的问题是:

    问题1。这个 list can包含 1000s 所以 20 1000 * 20 comparisions 刮1000根弦。上述方法(代码中显示)正确吗?

    4 回复  |  直到 14 年前
        1
  •  0
  •   JRL    14 年前

    有一件事看起来不对,那就是你的倍数 if 你内心的陈述 for 循环和唯一的变量来保存刮取的数据。这意味着如果您的方法检索多个 pageContent

    这就是你想要的吗?如果不是,你应该重构你的 对于 循环和你的 如果 声明,也许把整个列表传递给 getName getAddress

        2
  •  0
  •   Lutger    14 年前

    你认为目前的设计有什么错误或笨拙的地方吗?

    我不认为这是什么设计模式还不清楚,这可能是因素,如果在所有。有一件事我还不清楚,刮削过程的期望输出到底是什么?

    也就是说,这是我的2美分:

        3
  •  0
  •   akf    14 年前

    也就是说,从您的示例来看,您似乎正在从内部测试复选框的状态 main actionPerformed (继承自 ActionListener 接口),或对Swing事件做出反应的类似观察者。我建议使用GUI设计,提供一个按钮来触发动作,你的应用程序将注册为 监听器 执行的操作 方法,您可以移动触发器来开始解析页面内容。你要提防 threading constraints that Swing provides ,并将数据库调用移动到工作线程。如果你还不熟悉,看看 SwingWorker

        4
  •  -1
  •   Reader    14 年前

    几乎没有人能告诉您哪种设计模式适合您的问题。我建议你,只研究那些你认为适合你的问题的设计模式。你发现不止一个设计可以解决你的问题。只需实现它们,编写代码,然后再次研究您的需求。再次使用其他设计模式并实现它。最终你会以正确的设计结束。这是你可以了解设计模式和它们之间的差异,这将有助于你在未来选择正确的设计。 设计模式是GOF提出的现成的解决方案,它们不直接解决任何问题。他们只是给你正确的方向。