EffectiveJava(1) 构造器和静态工厂方法
构造器和静态工厂方法
**构造器是大家创建类时的构造方法,即使不显式声明,它也会在类内部隐式声明,使我们可以通过类名New一个实例.
静态方法是构造器的另一种表现形式**
主题要点:何时以及如何创建对象,何时以及如何避免创建对象,如何确保对象能够适时的销毁,以及如何管理对象销毁之前必须进行的清理动作
1.类通过静态工厂方法让客户端获取自身实例而不通过构造器
优势:-有名称(如果构造器本身没有确切的描述正被返回的对象,那具有适当名称的静态工厂1会更容易使用,产生的客户端代码也更容易阅读BigInteger.probablePrime>>BigInteger(int,int,Random))
-不必每次调用它的时候都创建一个新对象
-它们可以返回原返回类型的任何子类型的对象(灵活性)
-在创建参数化类型实例的时候,使代码变得更加简洁(必须指明类型参数)
public static <K,V> HashMap<K,V> newInstance(){ return new HashMap<K,V>}
Map<String,List<String>> map = HashMap.newInstance();
可以将这样的静态方法放在自己的参数化的类中
缺点:-类如果不含有公有的或者受保护的构造器,就不能被子类化
-它们与其他的静态方法实际上没有任何区别
静态工厂方法的使用场景
-当一个类需要多个带有相同签名的构造器时
2.服务提供者框架
多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把它们从多个实现中解耦出来
服务接口:提供者
提供者注册API:系统
服务访问API:客户端用来获取服务实例 >> 灵活的静态工厂
服务提供者接口:提供者负责创建其实现的实例
3.惯用名称
valueOf – 类型转换方法.该方法返回的实例与它的参数具有相同的值
of – valueOf的一种简洁写法
getInstance – 返回的实例是通过方法的参数来描述的.对于单例来说,该方法没有参数并返回唯一实例
newInstance – 确保返回的每个实例都与其他实例不同,其他功能同上
getType – type表示工厂方法中所返回的对象类型.在工厂方法处于不同类中使用
newType – 同上,类似newInstance
EffectiveJava(1) 构造器和静态工厂方法的更多相关文章
- 静态工厂方法VS构造器
我之前已经介绍过关于构建者模式(Builder Pattern)的一些内容,它是一种很有用的模式用于实例化包含几个属性(可选的)的类,带来的好处是更容易读.写及维护客户端代码.今天,我将继续介绍对象创 ...
- Java - 用静态工厂方法代替构造器
Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静 ...
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...
- 改善JAVA代码01:考虑静态工厂方法代替构造器
前言 系列文章:[传送门] 每次开始新的一本书,我都会很开心.新书新心情. 正文 静态工厂方法代替构造器 说起这个,好多可以念叨的.做了一年多的项目,慢慢也有感触. 说起构造器 大家很明白,构造器 ...
- Effective java读书札记第一条之 考虑用静态工厂方法取代构造器
对于类而言,为了让client获取它自身的一个实例,最经常使用的方法就是提供一个共同拥有的构造器. 另一种放你发,也应该子每一个程序猿的工具箱中占有一席之地.类能够提供一个共同拥有的静态 工厂方法.它 ...
- 【读书笔记 - Effective Java】01. 考虑用静态工厂方法代替构造器
获取类的实例有两种方法: 1. 提供一个公有的构造器(最常用). 2. 提供一个公有的静态工厂方法(static factory method). // 静态工厂方法示例 public static ...
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...
- effective java 3th item1:考虑静态工厂方法代替构造器
传统的方式获取一个类的实例,是通过提供一个 public 构造器.这里有技巧,每一个程序员应该记住.一个类可以对外提供一个 public 的 静态工厂方法 ,该方法只是一个朴素的静态方法,不需要有太多 ...
- 【Effective Java】第二章-创建和销毁对象——1.考虑用静态工厂方法代替构造器
静态工厂方法的优点: 可以赋予一个具有明确含义的名称 可以复用唯一实例,不必每次新建 可以返回原实例类型的子类对象 可以在返回泛型实例时更加简洁 缺点: 类如果不含有共有的或者受保护的构造器,就不能被 ...
随机推荐
- Android横竖屏总结(转)
Android横竖屏总结(转) 横竖屏切换后Activity会重新执行onCreat函数,但是在Android工程的Mainfest.xml中加入android:screenOrientation=& ...
- 百度之星初赛(A)——T1
小C的倍数问题 Problem Description 根据小学数学的知识,我们知道一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数.反之,如果一个数每一位加起来是3的倍数,则这个数肯定是3 ...
- IaaS, PaaS和SaaS
原文链接:http://www.leiphone.com/news/201406/iaas-paas-and-saas.html 云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, Ia ...
- 使用timeit模块 测试两种方式生成列表的所用的时间
from timeit import Timer def test(): li=[] for i in range(10000): li.append(i) def test2(): li=[i fo ...
- MySQL学习——基础
本文是MySQL的基础知识. Linux启动MySQL服务命令 : service mysql start Linux关闭MySQL服务命令 : service mysql stop 登录MySQL命 ...
- linux的文件权限分析
windows中,文件的类型是根据后缀名来确定的,但是linux则是根据标志来确定的,查看一个文件的权限的命令是 ls -l #查看文件的权限 文件的权限结构如图: ①第一部分:10个字符(第1位表示 ...
- django返回响应对象
Django的视图必须要返回一个HttpResponse对象(或者其子类对象),不能像flask一样直接返回字符串. Django: return HttpResponse("Hello&q ...
- python每日一类(1):pathlib
每天学习一个python的类(大多数都是第三方的),聚沙成金. -------------------------------------------------------------------- ...
- JavaScript 开发者的 10 款必备工具
JavaScript,一种所有主流浏览器都支持的语言,是开发基于浏览器的 Web 应用程序的主力,几乎每年都会受到来自众多开发人员的关注.自然地,框架和库的生态系统自然而然地围绕着 JavaScrip ...
- J.U.C并发框架源码阅读(六)ConditionObject
基于版本jdk1.7.0_80 java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject 代码如下 /** * Con ...