获取类的实例有两种方法:

1. 提供一个公有的构造器(最常用)。

2. 提供一个公有的静态工厂方法(static factory method)。

// 静态工厂方法示例
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}

静态工厂方法的优势:

1. 有名称。当一个类需要多个带有相同签名(方法签名 = 方法名 + 参数列表)的构造器时,就用静态工厂方法代替构造器,并且慎重选择名称以便突出它们之间的区别。

2. 不必每次调用它们的时候都创建一个新对象。

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

4. 在创建参数化类型实例的时候,使代码变得更加简洁。类型推导:比如HashMap<K,V>里的K和V就是参数,如果参数一多,每次new的时候都要写一遍,显得冗长。

静态工厂方法的缺点:

1. 类如果不含公有的或者受保护的构造器,就不能被子类化。

2. 与其他的静态方法实际上没有任何区别。

课外链接:服务提供者框架。有三个重要组件:

1. Service Interface:提供者实现。

2. Provider Registration API:注册有哪些provider。

3. Service Access API:调用provider的service。

一个可选组件:Service Provider Interface。

详解:https://blog.csdn.net/zl3450341/article/details/7227197

【读书笔记 - Effective Java】01. 考虑用静态工厂方法代替构造器的更多相关文章

  1. Effective Java 读书笔记(一):使用静态工厂方法代替构造器

    这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...

  2. Effective java读书札记第一条之 考虑用静态工厂方法取代构造器

    对于类而言,为了让client获取它自身的一个实例,最经常使用的方法就是提供一个共同拥有的构造器. 另一种放你发,也应该子每一个程序猿的工具箱中占有一席之地.类能够提供一个共同拥有的静态 工厂方法.它 ...

  3. 改善JAVA代码01:考虑静态工厂方法代替构造器

    前言 系列文章:[传送门]   每次开始新的一本书,我都会很开心.新书新心情. 正文 静态工厂方法代替构造器 说起这个,好多可以念叨的.做了一年多的项目,慢慢也有感触. 说起构造器 大家很明白,构造器 ...

  4. 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器

    类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...

  5. 【读书笔记 - Effective Java】05. 避免创建不必要的对象

    1. 如果对象是不可变的(immutable),它就始终可以被重用. (1) 特别是String类型的对象. String str1 = new String("str"); // ...

  6. [Java读书笔记] Effective Java(Third Edition) 第2章 创建和销毁对象

      第 1 条:用静态工厂方法代替构造器 对于类而言,获取一个实例的方法,传统是提供一个共有的构造器. 类可以提供一个公有静态工厂方法(static factory method), 它只是一个返回类 ...

  7. effective java 3th item1:考虑静态工厂方法代替构造器

    传统的方式获取一个类的实例,是通过提供一个 public 构造器.这里有技巧,每一个程序员应该记住.一个类可以对外提供一个 public 的 静态工厂方法 ,该方法只是一个朴素的静态方法,不需要有太多 ...

  8. Java - 用静态工厂方法代替构造器

    Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...

  9. 高效JAVA之用静态工厂方法代替构造器

    程序员这行干的久了,总会染上一些恶习,我就染上一个让人深恶痛绝,自己却津津乐道的习惯,还不想改的那种,它可以叫做强迫症,也可以叫做洁癖.那就是我不允许我的IDEA出现一点点警告,什么黄色背景,绿色波浪 ...

随机推荐

  1. 应该是很简单的事,关于SQL2005的视图浏览不排序问题

    http://bbs.csdn.net/topics/390667337?page=1

  2. 删除List中指定的元素

    删除List中指定的元素 CopyOnWriteArrayList是ArrayList的一个线程安全的变体实现,即可在多线程并发环境中使用 List<Map<String, Object& ...

  3. 创建第一个windows服务

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开 ...

  4. 仿照jQuery进行一些简单的框架封装(欢迎指教~)

    (function(window,undefined){ var arr = [], push = arr.push, slice = arr.slice; //首先要做的就是封装一个parseHtm ...

  5. 两步让你的mobile traffic通过fiddler代理传送

    mobile app运行时由于调试网络相关的内容非常不便,所以如果能够让iphone通过桌面主机来跑traffic,那么在pc上就能非常清楚地检查mobile app和后端之间有什么问题了. 幸运的是 ...

  6. NgModelController: $setViewValue,$render,Formatter, Parser

    NgModelController为ngModel directive提供了API.这个controller包含了关于data-binding,validation,css update, value ...

  7. The FLARE On Challenge

    上周才开始做这个CTF,用一周左右的时间完成了全部7道题.算是为即将到来的找工作进行热身和学习,下面记录一下遇到的问题和学到的东西,具体的解题过程就不详细描述了. challenge1 这道题用IDA ...

  8. 记一次insert因为db file sequential read影响性能导致性能原因的分析

    通过详细的10046 trace发现,大量的io等待分布在以下数据文件上:Misses in library cache during parse: 0Elapsed times include wa ...

  9. CentOS 安装 dokuwiki

    前期准备:yum 安装httpd和mysql 1.下载dokuwiki安装包 http://download.dokuwiki.org/: 2.centos系统中httpd的根目录为:/var/www ...

  10. 4springboot:日志(下)

    1.指定配置  位置: 给类路径下放上每个日志框架自己的配置文件即可: SpringBoot就不使用他默认配置的了 使用什么日志则配置什么文件以及注意文件名 自定义: <?xml version ...