`

第1条: 考虑用静态工厂方法替代构造器

阅读更多
1 考虑用静态工厂方法替代构造器
类可以提供一个公有的静态工厂方法,他只是一个返回类的实例的静态方法。


实例受控类
public static Boolean valueOf(boolean b)
{
    return b ? Boolean.TRUE : Boolean.FALSE;
}


编写实例受控类有几个原因。实例受控使得类可以确保他是一个Singleton或者是不可实例化的。他还使得不可变类可以确保不会存在两个相等的实例。

API可以返回对象,同时又不会使对象的类变成公有的。以这种方式隐藏实现类会使API变得非常简介。这种结束适用于基于接口的框架(java.util.Collections)



这样做有几大优势。
  • 他们有名称。
  • 不必再为每次调用他们都创建一个新对象。
  • 他们可以返回原返回类型的任何子类型的对象。
  • 在创建参数化类型实例的时候,他们是代码变得更加简洁。

静态工厂方法的缺点
  • 类如果不含公有的或者受保护地构造器,就不能被子类化。
  • 他们与其他的静态方法实际上没有任何区别。

  • 大小: 80.7 KB
分享到:
评论

相关推荐

    effective-java.pdf

    文档的内容部分开始讲述了Java编程中的一个关键知识点:使用静态工厂方法替代构造方法。以下是该知识点的详细解释: 1. 静态工厂方法与构造方法的区别:在Java中,构造方法用于创建类的实例,它与类同名并可拥有...

    Effective-Java读书笔记(上)

    2. **支持多种构造方式**:当一个类需要提供多个带有相同签名的构造器时,可以使用静态工厂方法来替代这些构造器,使得代码更加简洁明了。 3. **支持单例或享元模式**:静态工厂方法可以用于实现单例模式或享元模式...

    现代编程语言- Kotlin 之美 - 当下最火的编程语言欣赏.pdf

    #### EJ 第1条:考虑使用静态工厂方法代替构造器 在实例化对象的过程中,静态工厂方法相较于构造器具有明显的优势。这些优势不仅限于易于理解和避免不必要的对象创建,还包括能够灵活地返回原类型的任何子类型。...

    effecctivejava 第三版中文

    1. **构造器与工厂方法**:书中强调,类的构造器应该简洁且易于理解,同时推荐使用工厂方法来替代公开构造器,以提供更灵活的实例创建策略。 2. **枚举代替常量类**:枚举类型不仅提供了安全性和便利性,还能避免...

    Java核心技术(1).pdf

    - **项01:考虑静态工厂方法而不是构造器**:对于复杂的初始化过程,静态工厂方法可以提供更灵活的解决方案。 - **项02:避免创建不必要的对象**:过度创建对象会增加内存负担,应该尽可能重用现有对象或采用更高效...

    【JAVA 11】 Java SE Development Kit 11.0.16.1

    4. **静态工厂方法替代构造器**: - 在某些集合类中,如`Optional`、`Map.of()`和`List.of()`,使用静态工厂方法代替传统的构造器,以提供不可变的集合实例,提高了代码的安全性。 5. **字符串串联优化**: - ...

    effective3

    4. **静态工厂方法**:理解静态工厂方法优于构造器的优点,以及何时选择使用它们。 5. **单例模式**:学习如何正确实现线程安全且延迟初始化的单例模式。 6. **异常处理**:掌握异常处理的最佳实践,包括何时抛出...

    EFFECT JAVA 中文

    1. **构造器与工厂方法**:书中强调了如何正确使用构造器,包括私有构造器、工厂方法和静态工厂方法。静态工厂方法的优势在于它们可以有选择性地返回类的子类型实例,而无需暴露其实现细节。 2. **设计和实现equals...

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 第05章_高级类特性2(共69页).rar

    包括静态变量和静态方法,如静态工厂方法。 8. **内部类**:Java支持成员内部类、匿名内部类、局部内部类和静态内部类。它们在实现特定功能,如事件处理、线程协作等方面有独特优势。 9. **枚举(Enum)**:Java 5...

    Spring 3 中文帮助文档..pdf

    - **4.3.2.2 使用静态工厂方法来实例化**:使用静态工厂方法创建Bean。 - **4.3.2.3 使用实例工厂方法来实例化**:通过实例工厂方法创建Bean。 - **4.4 依赖** - **4.4.1 依赖注入** - **4.4.1.1 基于构造方法的...

    Effective-Java-2nd-Edition-(May-2008).zip_effective java

    6. **构造器与工厂方法**:讨论了构造器与工厂方法之间的权衡,指出工厂方法可以提供更好的灵活性,如延迟初始化和返回子类实例。 7. **接口与抽象类**:解释了接口和抽象类的选择依据,以及何时使用单例接口,何时...

    java最经典面试题.doc

    - 在编译阶段进行合并,只在第一次请求时加载被包含的页面。 #### 十一、在JSP中的两种跳转方式及区别 - **转发(forward)**:使用`<jsp:forward page="..."/>`标签或`RequestDispatcher.forward(request, ...

    java jdk api 1.8中文版-

    3. **方法引用和构造器引用**:与Lambda表达式一起,方法引用和构造器引用使得可以直接使用已存在的方法或构造器,而无需编写额外的代码块。 4. **Optional类**:Optional类用于表示可能为null的对象,避免了...

    spring笔记

    * 静态工厂方法初始化(遗留老系统) * 实例工厂方法初始化(遗留老系统) Bean 的作用范围 * 默认情况下,spring 容器管理的 bean 的实例都是单例的 Bean 的生命周期 * Servlet、Filter、Interceptor 等,接口...

    Java、python的JDK11.0.11

    4. **静态工厂方法替代构造器(Sealed Classes)**:增强了类的封装性,控制了子类的继承。 5. **文本块(Text Blocks)**:对于多行字符串的处理更方便,减少了转义字符的使用。 6. **改进的垃圾收集器(G1和ZGC...

    java学习资料.zip

    4. **构造器(Constructors)**:讲解如何设计构造器,以满足单例模式、工厂方法和建造者模式等设计模式的要求。 5. **接口(Interfaces)**:探讨接口与抽象类的区别,以及如何有效地使用接口来定义API。 6. **...

    二十三种设计模式【PDF版】

    《Thingking in Java》(第一版中文)是这样描述设计模式的:他在由 Gamma, Helm 和 Johnson Vlissides 简称 Gang of Four(四人 帮),缩写 GoF 编著的《Design Patterns》一书中被定义成一个“里程碑”。事实上,那本书...

Global site tag (gtag.js) - Google Analytics