Effective Java学习笔记?effecttive java

Effective Java学习笔记Java的类往往不是独立的,而是依赖一个或者多个底层的资源来构建的。就比如一个蛋糕,必须要依靠一个模子才能做出想要的形状。这里,作者举了一个拼写检查器的例子&#x

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

(0)
CSDN的头像CSDN
上一篇 2024年6月27日
下一篇 2024年6月27日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注