`
robindut
  • 浏览: 46329 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

1.考虑用静态工厂方法代替构造器

 
阅读更多

1.考虑用静态工厂方法代替构造器

 

   例子:

 

public static Boolean valueOf(boolean b){
    return b ? Boolean.TRUE : Boolean.FALSE;
}

 使用静态工厂替代构造器的优势:

1)他们有名称

2)不必每次调用都产生新的对象

  3)可以返回原返回类型任何子类型的对象

4)创建参数化类型实例的时候,使代码更简洁

缺点:1)类如果不含公有的或者受保护的构造器,就不能被子类化

 2)与其他的静态方法没有任何区别:API中没有特殊标明,因此很难查找如何实例化一个类。

 

静态工厂方法的惯用名称

*valueOf--该方法返回的实例与它的参数具有相同的价值。这样的静态工厂方法实际上是类型转换方法。

*of--valueOf的一种更为简洁的替代

*getInstance--返回的实例是通过方法的参数来描述的,但是不能说具有与参数同样的值。对于singeton来说,该方法     没有参数,并返回唯一实例

*newInstance--像getInstance一样,但newInstance能确保返回的每个实例都与其他实例不同

*getType--像getInstance一样,但是在工厂方法处于在不同的类中时使用。Type表示工厂方法所返回的对象类型

*newType--像newInstance一样,但是在工厂方法处于在不同的类中时使用。Type表示工厂方法所返回的对象类型

 

分享到:
评论

相关推荐

    java静态工厂方法详细解析——使用静态工厂方法代替构造器

    1. **静态工厂方法有名称**:与构造器只能通过类名来区分不同实例化方式不同,静态工厂方法可以根据功能命名,使得代码更易读,更直观地理解方法的作用。 2. **静态工厂方法不用在每次调用时创建新对象**:静态工厂...

    Effective-Java读书笔记(上)

    ##### 用静态工厂方法代替构造器 在面向对象编程中,对象的创建通常是通过构造器来完成的。然而,在某些情况下,使用静态工厂方法来创建对象可能会更加灵活和高效。 **静态工厂方法的优势**: 1. **命名清晰**:...

    最新版linux jdk-11.0.12_linux-x64_bin.tar.gz

    4. **静态工厂方法代替构造器**:对于不可实例化的类,可以使用静态工厂方法替代传统的构造器。 5. **改进的字符串处理**:例如,`isBlank()`方法检查字符串是否为空或只包含空白字符。 以上就是关于"最新版linux ...

    Effective Java第三版1

    1. **静态工厂方法**:相比构造器,静态工厂方法有优点如可以不返回新实例、允许返回同一实例(单例)、可以有更具选择性的访问控制,并且命名更自由。 2. **构建器(Builder pattern)**:当类有多个构造器参数时,...

    最新版linux jdk-11.0.16.1_linux-x64_bin.tar.gz

    4. **静态工厂方法代替构造函数**:对于无状态的类,鼓励使用`Objects.requireNonNull()`等静态工厂方法。 5. **改进的字符串处理**:如`isBlank()`, `strip()`, `stripIndent()`, 和 `stripTrailing()`方法。 6. **...

    《Effective Java》读书分享.pptx

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

    【JAVA 11】 Java SE Development Kit 11.0.16.1

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

    Effecctive java 中文版

    9. **项9:使用静态工厂方法代替构造器** 静态工厂方法有命名自由、不需暴露构造器、可以返回原类型或子类型的实例等优势。 10. **项10:考虑提供一个无参构造器用于序列化** 序列化时,如果类没有无参构造器,...

    java effective 第二版中英文二份文件

    4. **使用静态工厂方法代替构造器**:静态工厂方法不需创建新类实例,可以返回之前创建的对象,实现单例模式或返回不可变对象。此外,它们无需在类声明时就确定,可以有更具表达力的名字。 5. **考虑用私有构造器或...

    JAVA JDK11版本

    4. **静态工厂方法代替构造器**:在JDK11中,一些类如`Optional`和`Stream`现在提供静态工厂方法,而不是传统的构造器,这使得代码更加简洁,也符合函数式编程的风格。 5. **强类型HTTP响应体**:HTTP客户端API引入...

    jdk11-oracle官方英文-帮助文档.zip

    5. **静态工厂方法代替构造器(Sealed Classes)**:JDK 11引入了密封类(Sealed Classes)的概念,限制了哪些其他类可以扩展或实现特定的类或接口,通常通过静态工厂方法提供实例,以增加封装性。 6. **弃用Java ...

    jdk-11.0.8_windows-x64_bin.rar

    4. **静态工厂方法代替构造函数( sealed classes)**:增强了类的封装性,控制了子类的扩展。 5. **文本块(Text Blocks)**:在Java 13引入,11中没有,但在后续版本中,这是一个显著提升代码可读性的特性,特别是...

    jdk api 1.8中文版chm的解释文档

    6. **静态工厂方法**:推荐使用静态工厂方法代替传统的构造器,因为它们可以有更具描述性的名称,并且不需要创建一个新的类实例就能调用。 7. **类型推断增强**:Java 1.8增强了类型推断,使得编译器能更好地推断出...

    JDK11.0.16安装包-压缩版

    4. **静态工厂方法代替构造器(JEP 321)**:为某些类,如Optional和Stream,增加了静态工厂方法。 5. **删除Java EE和 CORBA模块(JEP 320)**:移除了不再维护的Java EE和CORBA模块,简化了JDK。 6. **JLink和...

    Effective.Java3rd.zip

    9. **优先考虑静态工厂方法而非公共构造器**:静态工厂方法提供了更灵活的无状态类创建方式,例如,它们可以返回已存在的对象以节省资源。 10. **使用枚举代替常量类**:枚举不仅可以存储常量,还可以定义行为,比...

    Effective-Java读书笔记

    3. **优先考虑静态工厂方法而非构造器**:静态工厂方法比公有构造器更灵活,它们不需要在每次实例化时都创建一个新的类实例,还可以返回已缓存的实例或限制对象的创建。 4. **使用不可变对象**:不可变对象一旦创建...

    effecctivejava 第三版中文

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

    iOS代替单例的方法

    在iOS中,可以通过构造函数、属性注入或者通过方法设置依赖。 3. **服务定位器(Service Locator)** 虽然服务定位器模式与单例有些相似,但它提供了对依赖关系的更灵活管理。服务定位器是一个容器,存储了多个...

Global site tag (gtag.js) - Google Analytics