Java实用程序类麻烦

时间:2016-02-10 14:29:18

标签: java architecture

我有一些数据结构需要字母作为其构造函数的参数。因此,如果我创建它的新实例,我将需要每次提供一个字母表。

有更简单的方法吗? 我认为我可以通过使用静态实用程序类来解释它,比如这个

Alphabet {
  public static final eng = "abc...z";
  public static final ua = "абв...я";
}

但这并不能保证可扩展性。我的意思是,我可以在这类课程中添加一些字母,但用户无法添加自己的字母,例如俄语字母。

我可以创建实用程序类,它使用HashMap的私有实例,其中 K 是coutry-code而 V 是字母表,并且支持用户的get / put方法。所以这样我可以保证可扩展性。 但这不是一切都很复杂吗?

修改

假设我目前正在这样做

Structure instance = new Structure("abc...z");
//in another class
Structure instance = new Structure("abc...z");

按实用程序类我可以这样做

Structure instance = new Structure(Alphabet.eng);
//in another class
Structure instance = new Structure(Alphabet.eng);

1 个答案:

答案 0 :(得分:3)

听起来我应该有一个界面。提供一些您自己的实现(可能是枚举),而另一个开发人员仍然可以创建自己的实现。使用此字母表的方法应该接受一个接口(而不是你的枚举)。

interface Alphabet {
    String characters();
}

enum KnownAlphabet implements Alphabet {
    ENG("abc...z"),
    UA("абв...я");

    private final String characters;

    KnownAlphabet(String characters) {
        this.characters = characters;
    }

    @Override
    public String characters() {
        return characters;
    }
}

class Structure {
    public Structure(Alphabet alphabet) {
        String characters = alphabet.characters();
        // do whatever you were doing with the characters before
    }
}

然后你的:

Structure instance = new Structure(Alphabet.eng);

变更为:

Structure instance = new Structure(KnownAlphabet.ENG);

这是你在找什么?