Java 类通常不是独立的,而是根据一个或多个底层资源构建的。就像蛋糕一样,您需要依靠模具来制作所需的形状。在这里,作者展示了一个拼写检查器的示例。拼写检查器必须依赖一本或多本字典来执行验证。
类如何才能引入资源
作者介绍了几种方法,可以分为两类。一种是在类级别引入资源,一种是在实例级别引入资源。
在类的层面直接引入资源
如果一个类本身需要实现为静态内部类,并且其依赖的资源单一且稳定,则可以将资源设置为静态常量。
公共类拼写检查器{
私有静态最终词典lexicon=new Lexicon();
私有拼写检查器(){};
公共静态布尔isValid(字符串字){
}
公共静态ListString建议(字符串拼写错误){
}
}
在这里,作者还展示了如何将其实现为单例模式。
公共类拼写检查器2 {
私有最终字典字典=.
私有拼写检查器2(){};
私有静态SpellChecker2 实例=new SpellChecker2();
公共静态拼写检查器2 getInstance() {
返回实例。
}
公共静态布尔isValid(字符串字){
}
公共静态ListString建议(字符串拼写错误){
}
}
首先,在此示例中,这两种方法非常相似,并且仅针对一个拼写检查器。该拼写检查器仅包含作为依赖项引入的某些字典,但您必须首先通过getInstance() 方法传递单例模式。静态工具类似乎更好,因为它们可以直接启用与实例关联的方法,并且静态方法不依赖于实例状态本身并且是线程安全的。但是,如果这个检查器需要记录相关的状态变量(登录状态、调用次数等),单例模式更好。因此,哪种方法更适合取决于您的实际需求。
然而,这两种方法的局限性也很明显。在现实场景中,对多种语言进行拼写检查是不够的,因为拼写检查器需要根据不同的实例进行定位。性的。
在实例的层面去引入资源
在实例级别引入这一点的最佳方法肯定是使用构造函数(当然您也可以使用静态工厂和构建器方法)。这里有两种模式,一种是直接将资源传递给构造函数。另一种方法是将资源作为参数直接传递给构造函数。资源接口作为参数传递。
对于简单的资源结构,直接传递即可。但是,如果您的资源结构比较复杂(通常配有资源工厂类),则需要通过接口将资源工厂引入到您的实例中。
对于这里的接口,作者推荐Java 8以来实现的SupplierT泛型接口。这是一个不接受参数并通过get() 方法返回关联对象的函数接口。
公共类拼写检查器3 {
个人终极词典词典。
私有拼写检查器3(){};
public getDictionary(供应商?扩展字典dicFactory){
.
}
公共静态布尔isValid(字符串字){
}
公共静态ListString建议(字符串拼写错误){
}
}
当然,作者注意到这种依赖注入的方式会导致项目结构混乱,因此通常使用Spring 等依赖注入框架,并通过Maven 来管理依赖。
以上#Effective Java学习笔记相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92636.html