Effective java读书札记第一条之 考虑用静态工厂方法取代构造器
对于类而言,为了让client获取它自身的一个实例,最经常使用的方法就是提供一个共同拥有的构造器。
另一种放你发,也应该子每一个程序猿的工具箱中占有一席之地。类能够提供一个共同拥有的静态 工厂方法。它仅仅是返回类的实例的静态方法。
类能够通过静态工厂方法类提供它的client(对象),而不是通过构造器。提这样做的优点有:
1.静态工厂方法与构造器不同的第一大优势在于。它们有名称.比方构造器BigInteger(int,int,Random)返回的BigInteger可能为素数,假设用名为BigInteger.probablePrime的静态工厂方法来表示,显然更为清楚。当一个类须要多个带有同样签名的构造器时,就用静态工厂方法取代构造器,而且谨慎地选择名称以便突出它们之间的差别。
2.静态工厂方法与构造器不同的第二大优势在于,不必再每次调用它们的时候都创建一个新对象。这个详细不说了,能够看下单例模式。
3.静态工厂方法与构造器不同的第三大优势在于。它们能够返回原返回类型的不论什么子类型的对象。这项技术适用于基于接口的框架。使用这样的静态方法时。甚至要求额client通过接口来引用被返回的对象。而不是通过它的实现类来引用被返回的对象,这是一种良好的习惯。
4.静态工厂方法的第四大优势在于。在创建參数化类型的实例的时候,它们使代码变得更加简洁。
缺点:
静态工厂方法的主要缺点在于,类假设不含有共同拥有的或者受保护的构造器,就不能被子类化。
静态工厂方法的第二个缺点在于,它们与其它的静态方法实际上没有不论什么差别。
在API文档中,它们没有像构造器那样明白标识出来。因此,对于提供了静态工厂方法而不是构造器的类来说。要想查明怎样实例化一个类,这是很困难的。只是你通过在类或者接口凝视中关注静态工厂,并遵守标准的命名习惯,也能够弥补这一劣势。以下是一些惯用名称:
valueOf
of
getInstance
newInstance
getType
newType
简而言之。静态工厂方法和共同拥有构造器都各实用处,我们须要理解它们各自的唱出。
静态工厂通常更加合适,因此切忌第一反应就是提供公有的构造器,而不先考虑静态工厂。
Effective java读书札记第一条之 考虑用静态工厂方法取代构造器的更多相关文章
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...
- Effective Java第三版(一) ——用静态工厂代替构造器
此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<E ...
- effective java 3th item1:考虑静态工厂方法代替构造器
传统的方式获取一个类的实例,是通过提供一个 public 构造器.这里有技巧,每一个程序员应该记住.一个类可以对外提供一个 public 的 静态工厂方法 ,该方法只是一个朴素的静态方法,不需要有太多 ...
- Java - 用静态工厂方法代替构造器
Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...
- 高效JAVA之用静态工厂方法代替构造器
程序员这行干的久了,总会染上一些恶习,我就染上一个让人深恶痛绝,自己却津津乐道的习惯,还不想改的那种,它可以叫做强迫症,也可以叫做洁癖.那就是我不允许我的IDEA出现一点点警告,什么黄色背景,绿色波浪 ...
- 改善JAVA代码01:考虑静态工厂方法代替构造器
前言 系列文章:[传送门] 每次开始新的一本书,我都会很开心.新书新心情. 正文 静态工厂方法代替构造器 说起这个,好多可以念叨的.做了一年多的项目,慢慢也有感触. 说起构造器 大家很明白,构造器 ...
- Effective Java —— 用静态工厂方法代替构造器
本文参考 本篇文章参考自<Effective Java>第三版第一条"Consider static factory methods instead of constructor ...
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...
- 【读书笔记 - Effective Java】01. 考虑用静态工厂方法代替构造器
获取类的实例有两种方法: 1. 提供一个公有的构造器(最常用). 2. 提供一个公有的静态工厂方法(static factory method). // 静态工厂方法示例 public static ...
随机推荐
- 「SCOI2014」方伯伯的商场之旅
「SCOI2014」方伯伯的商场之旅 题目描述 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 \(i\) 的人面前的第 \(j\) 堆的石 ...
- ARC 101 C - Candles
题面在这里! 显然直接枚举左端点(右端点)就OK啦. #include<cstdio> #include<cstdlib> #include<algorithm> ...
- poj 1733 并查集+hashmap
题意:题目:有一个长度 已知的01串,给出多个条件,[l,r]这个区间中1的个数是奇数还是偶数,问前几个是正确的,没有矛盾 链接:点我 解题思路:hash离散化+并查集 首先我们不考虑离散化:s[x] ...
- 51nod 1040 最大公约数之和 欧拉函数
1040 最大公约数之和 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 Description 给 ...
- 《pyhton学习手册》 第33章 异常编码细节
try/except/else语句 这些语句的一般的格式如下图所示 其中try中定义了主要执行的动作.except中定义了try语句当中发生异常的处理器.else定义了没有发生异常时候的处理器. tr ...
- linux系统相关、硬件、资源 - 相关命令
分类命令: 1.1.系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本 # ...
- Papilio Pro Boards
http://papilio.cc/index.php?n=Papilio.PapilioOne The Papilio is an Open Source FPGA development boar ...
- KD100遥控生成仪
KD100是KEYDIY公司开发的一个强大的车用/民用遥控器生成工具,所生成的遥控器都具备不重码,质量稳定的特点. 通过采用英飞凌和NXP等公司开发的超级芯片,KD100巧妙的解决了各类型遥控器的兼容 ...
- maven,阿里云国内镜像,提高jar包下载速度
镜像 maven默认会从中央仓库下载jar包,这个仓库在国外,而且全世界的人都会从这里下载,所以下载速度肯定是非常慢的.镜像就相当于是中央仓库的一个副本,内容和中央仓库完全一样,目前有不少国内镜像,其 ...
- Python continue 语句
Python continue 语句 Python continue 语句跳出本次循环,而break跳出整个循环. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮 ...