引言
有许多类在应用时会依赖一个或多个底层资源。比如说,一个拼写检查器,它检查单词拼写时需要依赖辞典,因此初学者很可能将这个字典定义为一个static final的类对象:
class SpellChecker {
private static final Lexicon dictionary = . . .;
private SpellChecker() {}
public static boolean isValid(String word) { . . . }
}
但是这样的方法有一个明显的局限,就是dictionary作为检查拼写的依赖,它是被写死的,固定死的一个常量,在依赖固定,且数量较少时我们可以使用这种手段。
但我们是否有一个好的方法可以让这个类支持大量依赖,甚至是动态的依赖?
解决方案
class SpellChecker {
private final Lexicon dictionary;
private SpellChecker(Lexicon dictionary) {
this.dictionary = Objects.requireNonNull(dictionary);
}
public static boolean isValid(String word) { . . . }
}
将dictionary设置成私有成员,而不是一个静态的类成员,并给定一个构造方法去设定dictionary的具体内容,这样就可以实现动态特性,我们可以根据具体的dictionary构造特定的SpellChecker去实现指定规则的检查,而不是像引言里的情况一下将字典从代码层面写死。
那加入我们的依赖有很多,我们则可以将dictionary设置成一个工厂类,本文不对工厂类的相关内容做进一步解释。