优势:

第一条:静态工厂方法有名称,可以从名字看出方法的作用,容易使用。

第二条:不必每次调用都创建一个新对象。

第三条:静态工厂方法可以返回原类型的任何子类型的对象。

第四条:在创建参数化类型的实例的时候,他们是代码变得更加简洁。

缺点:

第一条:类如果没有共有的或者受保护的构造器,就不能被子类化。

第二条:他们与其他的静态方法实际上没有任何区别。这样在API文档里难于查明如何实例化一个类。

一个简单实现:

public interface Service{}
public interface Provider {
}
public class Services {private Services(){ }private static final Map<String, Provider> providers =new ConcurrentHashMap<String, Provider>();public static final String DEFAULT_PROVIDER_NAME = "<DEF>";public static void registerDefaultProvider(String name, Provider p){registerProvider(DEFAULT_PROVIDER_NAME);}public static void registerProvider(String name, Provider p) {providers.put(name, p);}public static Service newInstance() {return newInstance(DEFAULT_PROVIDER_NAME);}public static Service newInstance(String name) {Provider p = providers.get(name);if(p == null)throw new IllegalArgumentException("No provider registered with name: " + name);return p.newService();}}

转载于:https://blog.51cto.com/wjkvipgood/1395303

Effective Java 第一条:考虑用静态工厂方法代替构造器相关推荐

  1. 小鸡爪读Effective Java记录1:用静态工厂方法代替构造器

    //小鸡爪 == 菜鸡 遇到多个构造器参数时要考虑使用构建器 Preface 静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数.比如用一个类表示包装食品外面显示的营养成分标签.这 ...

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

    转载链接:https://www.jianshu.com/p/ceb5ec8f1174 1.序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来 ...

  3. java 静态工厂方法代替构造器的好处

    Java 的静态工厂方法 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第 ...

  4. Java九十条经验法则之第一条:用静态工厂方法代替构造器

    一.用静态工厂方法代替构造器的优势 1.静态构造方法与构造器不同的第一大优势在于,他们有名称,而构造器名字相同,容易混淆,例如: 使用静态构造方式的方式,我们就可以通过知道产生的是什么样类型的对象,而 ...

  5. 《Effective Java》学习笔记 - (1) 使用静态工厂方法代替构造器

    文章目录 前言 使用静态工厂方法代替构造器 1. 优点 1.1 静态工厂方法有名称 1.2 不必每次调用的时候都创建一个对象 1.3 可以返回类型的任何子类型的对象 1.4 所返回的对象的类型可以随着 ...

  6. 【Effective Java】第二章:静态工厂、构建器、强化Singleton属性、私有构造器、

    文章目录 一. 用静态工厂方法代替构造器 优势: 劣势: 实例代码: 二. 遇到多个构造器参数时要考虑使用构建器 ① 重叠构建器 ② JavaBeans模式 ③ Builder模式 三. 用私有构造器 ...

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

    第1条:考虑采用静态工厂方法代替构造器 第1条:考虑采用静态工厂方法代替构造器 对类而言,为了让客户端获取它自身的一个实例,最常用的方法就是提供一个公有的构造器.还有一种应该被程序员重视的方法:类提供 ...

  8. 静态工厂方法代替构造器实例_静态工厂方法与传统构造方法

    静态工厂方法代替构造器实例 之前,我已经讨论过一些关于Builder模式的信息 , Builder Pattern是一种有用的模式,用于实例化具有几个(可能是可选的)属性的类,这些属性可以使读取,编写 ...

  9. 01、静态工厂方法替代构造器

    考虑用静态工厂方法替代构造器 考虑使用静态工厂方法来替代构造器的原因: 静态工厂方法有名称:普通的构造器中,参数并不能很好地描述返回对象的特点,代码的阅读性不好. 考虑下面的程序: Random ra ...

  10. 用静态工厂方法代替构造器

    1.静态工厂方法与构造器不同的第一大优势在于,它们有名称.如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读.例如,构造器Bigin ...

最新文章

  1. 【Runtime】动态添加方法demo
  2. JavaScript获取当前日期,昨天,今天日期以及任意天数间隔日期
  3. 数据集神经网络共同进步
  4. ubuntu python3.8安装pip_ubuntu16.04纯净版-安装Python3.8.1/升级pip
  5. SSH运维总结-【liunx学习】
  6. Django(part30)--原生的数据库操作方法
  7. traybox错误怎么办_toolbox提示错误无法使用怎么办?
  8. linux子线程运行的函数_Linux中线程使用详解
  9. java wav合并_用Java串联WAV文件
  10. Python 异步 ASGI 服务器及框架
  11. webrtc 静音检测(二)
  12. python基于Flask构建Web服务,解决Flask数据请求中的跨域问题
  13. centos7.2 部署k8s集群
  14. java游戏下载网址_手机java游戏下载网站
  15. JSP基础之九九乘法表(利用JSP脚本段制作一张九九乘法表)
  16. 算法设计与分析第二版源码
  17. 怎样在EDIUS中进行快速抠图
  18. 微软官方的SQLHelper类(含完整中文注释)
  19. 【无向图求最小割集】
  20. 五个优秀的视频格式转换工具

热门文章

  1. AMD CPU驱动被曝漏洞,可使 KASLR崩溃、密码泄露
  2. GitHub 上数十个 NetBeans 开源项目被卷入供应链攻击
  3. NSA 分享植入 web shell 的常用漏洞列表
  4. 用c语言实现艺术清屏
  5. 每日codewars题之判断一个数是否是水仙花数
  6. 【laravel5.4】查询构造器对象与模型instance的互相换换
  7. 面向对象的三个特点:封装、继承、多态
  8. oralce 创建用户和权限
  9. 安装mariadb---通用二进制格式安装
  10. 远程桌面怎样复制本地文件听语音