java - 更好的设计模式?

标签 java design-patterns javabeans

我的 myArrayList 中已经有值。对于这个例子,假设其中只有两个元素(firstName 和 lastName)。我需要从 myArrayList 获取值并将它们与 String 进行比较,如果匹配则从 bean 获取值并将其放入映射中:

        Map<String,String> myMap;
        for(String element: myArrayList){
               if(element.equalsIgnoreCase("firstName")){
                   myMap.put("firstName", bean.getFirstName());
               }else if(element.equalsIgnoreCase("lastName")){
                   myMap.put("lastName", bean.getLastName());
               }
        }

问题是,当 myArrayList 中有三十四十个元素时,您将遇到性能问题(我认为),而且感觉不太对劲。

我尝试过这个:

        String name = null;
        String value = null;
        for(int i = 0; i < myArrayList.size(); i++){
            name = myArrayList.get(i);
            value = bean.get(name);
            myMap.put(name, value);
        }

但是“value = bean.get(name);”行是说方法 get(String) 在 bean 类中未定义,实际上我们在 bean 类中没有这样的方法,它只有标准的 getter 和 setter 方法:

public class Bean implements Serializable {
    private String firstName;
    private String lastName;

    public String getFirstName(){
        return firstName;
    }

    public void setFirstName(String firstName){
        this.firstName = firstName;
    }

    public String getLastName(){
        return lastName;
    }

    public void setLastName(String lastName){
        this.lastName = lastName;
    }

}

现在我正在考虑如何提出一些设计模式来优化我的逻辑并且不影响代码的性能。请随时提问,如果您需要更多信息,我会编辑。任何帮助是极大的赞赏。谢谢。

编辑:shmosel 的回答对我来说非常好,谢谢大家的帮助!干杯!

最佳答案

@HankD 和 @Natalia 提供了一些有效的解决方案,但我没有看到提到的另一个选项是重构 Bean 以支持 get(String) 方法:

public class Bean implements Serializable {
    private Map<String, String> properties = new HashMap<>();

    public String get(String property) {
        return properties.get(property);
    }

    public void set(String property, String value) {
        properties.put(property, value);
    }

    public String getFirstName(){
        return get("firstName");
    }

    public void setFirstName(String firstName){
        set("firstName", firstName);
    }

    public String getLastName(){
        return get("lastName");
    }

    public void setLastName(String lastName){
        set("lastName", lastName);
    }

}

关于java - 更好的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874927/

相关文章:

java - 有没有人在 Google App Engine 上实现了 Java ftp 客户端

ios - (MVVM) 每个 View 或每个模型的 View 模型?

java - 如何通过双重引用创建bean?

java - EJB - 如何将复杂对象传输到表示层?

java - 使用 Jersey Client 将输出流获取到请求主体?

java - 尽管指定了正确的主类、类路径等,Jar 仍无法运行

bash - 仅文件通配和匹配数字

c# - 在应用程序设计方面需要帮助

java - 新的 .xhtml 页面不会呈现任何 jsf 标签,但以前创建的页面在同一个项目中仍然可以正常工作

java - 在所有 junit 测试用例中重用缓存