`
dbp_cn
  • 浏览: 85896 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

effective java读书笔记1--用静态工厂方法替代构造器

    博客分类:
  • java
 
阅读更多
对于类而言,为了让客户端获得它自身的一个实例,最常用的方法就是提供一个公有的构造器。还有一种方法就是类可以提供一个公有的静态工厂方法(static factory method)。

静态方法与构造器不同的第一大优势在于,它们有名称。能更清楚的描述返回的对象。
其第二大优势在于,不必每次调用它们的时候都创建一个新对象,如Boolean.valueOf(boolean)方法说明了这项技术,它从来不创建对象。静态工厂方法能够为重复的的调用返回相同对象,这样有助于类总能严格控制在某个时刻那些实例应该存在。
其第三大优势在于,它们可以返回原返回类型的任何子类型的对象。
其第四大优势在于,在创建参数化类型实例的时候,它们使代码变得更加简洁。遗憾的是在调用参数化类型的构造器时,即使类型参数很明显,也必须指明。这通常要求你接连两次提供类型参数:
Map<String,List<String>> m= new HashMap<String,List<String>>();

有了静态工厂方法,编译器就可以替你找到参数类型。这被称作类型推导。例如,假设HashMap提供了这个静态工厂:
public static <k,v> HashMap<k,v> newInstance(){
       return new HashMap<k,v>();
}
你就可以用下面这句简洁的代码代替上面这段繁琐的声明:
Map<String,List<String>> m=HashMap.newInstance();

下面是静态工厂方法的一些惯用名称:
valueOf,getInstance,newinStance.
分享到:
评论

相关推荐

    Effective Java读书笔记.pdf

    "Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典...Effective Java读书笔记总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点,为Java开发者提供了有价值的参考。

    effective java 读书笔记

    - Item1:静态工厂方法相比构造子,提供了更大的灵活性,例如可以返回对象的子类实例,或者在不改变API的情况下更改返回的对象类型。 - Item2:Builder模式适用于有大量构建参数的情况,它可以避免构造器的链式...

    jonykchen#effective-java-3rd-chinese#01. 考虑使用静态工厂方法替代构造方法1

    声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK

    Effective-Java读书笔记(上)

    2. **使用静态工厂方法**:如果一个类既提供了静态工厂方法也提供了构造器,则通常推荐使用静态工厂方法来创建对象,以减少不必要的对象创建。 通过以上讨论可以看出,使用静态工厂方法不仅可以让代码更加简洁易懂...

    effective-java.pdf

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

    Effective-Java读书笔记

    9. **谨慎地覆盖clone()**:Java的clone()方法有其复杂性,除非有特殊需求,否则通常建议使用拷贝构造器或工厂方法来复制对象。 10. **使用泛型**:泛型提供编译时类型检查,减少类型转换错误,使代码更易读,更...

    2021年EFFECTIVEJAVA读书笔记.docx

    Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...

    精版Effective STL读书笔记

    整体而言,Finix的精版《Effective STL》读书笔记覆盖了STL的关键知识点,包括各种容器的特性、迭代器的使用、以及如何高效地操作和管理容器。这对于任何想要深入了解并有效应用STL的C++程序员来说,都是宝贵的资源...

    《Effective Java》读书分享.pptx

    静态工厂方法可以代替构造器,提供了更多的灵活性和性能优势。静态工厂方法可以返回原类型的任何子类型,且可以将构建好的实例缓存起来,方便重复利用,不用每次调用都创建新对象,从而提高性能。 静态工厂方法的...

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

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

    Effective Java第三版1

    1. **考虑用静态工厂方法替换构造器**:静态工厂方法比构造器更灵活,它们可以返回已存在或新创建的对象,还可以有选择性地返回子类的实例,且名称可以更具描述性。 2. **构建器(建造者)**:当类有多个构造器参数...

    effectiveJava的笔记

    2. **构造器与工厂方法**:提倡使用私有构造器和静态工厂方法,以便于控制类的实例化过程,提高代码灵活性,例如实现不可变对象、延迟初始化等。 3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口...

    jonykchen#effective-java-3rd-chinese#82. 文档应包含线程安全属性1

    如果这些假设是错误的,生成的程序可能缺少足够的同步(详见 78 条)或过度的同步(详见 79 条)。无条件线程安全 — 该类的实例是可变的,但是该类具有足够的内

    effective c++读书笔记

    2. 用const、enum和inline替代#define:这一部分强调了使用预处理器宏的缺点,以及如何更有效地用编译器特性替代宏定义。 - const的使用:在编译时进行类型检查,并且const定义的对象只有一份拷贝,这有助于编译器...

    ihukaijun#effective-java-3rd-chinese#04. 使用私有构造方法执行非实例化1

    只有当类不包含显式构造器时,才会生成一个默认构造器,因此可以通过包含一个私有构造器来实现类的非实例化:public class UtilityClass {..

    effective-java 配套代码

    3. **构造函数与工厂方法(Constructors and Factory Methods)**: 书中提倡使用工厂方法代替公共构造函数,以实现更好的封装和灵活性。这里可能包含不同类型的工厂模式实现。 4. **可变与不可变对象(Mutable vs ...

    java逻辑思维笔试题-effective-java-3rd-edition:有效的Java第3版注释

    考虑静态工厂方法而不是构造函数 传统与灵活的对象实例化方式 静态工厂方法示例: public static Boolean valueOf( boolean b) { return b ? Boolean . TRUE : Boolean . FALSE ; } 的优点和缺点: (PRO) 静态工厂有...

Global site tag (gtag.js) - Google Analytics