欢迎使用CSDN-markdown编辑器

来源:互联网 发布:营销推广案例 知乎 编辑:程序博客网 时间:2024/05/16 09:48

Effective Java(2)-创建和销毁对象(上)

这一章的内容主要涉及7个条目

内容大纲

先上一个思维导图^_^,顺便推荐一个在线画图的好工具(Process On),有兴趣的可以试下,非常好用,强烈推荐!
这里写图片描述
下面让我们细细研究各个条目的内涵。

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

优势1:静态工厂方法有名称,而构造器没有

什么意思呢?
例子:我们这儿有一个需求,创建一个记录熊的类,熊有狗熊、北极熊、熊猫。
1)我们使用构造器Beer(address, color)创建:

狗 熊 = new Beer(丛林,黑色);
北极熊 = new Beer(北极,白色);
熊  猫 = new Beer(中国, 黑白);

2)我们使用静态工厂方法创建:

狗 熊 = Beer.GouXiong();
北极熊 = Beer.BeiJiXiong();
熊  猫 = Beer.XiongMao();

看到了吧,静态工厂方法有(GouXiong、BeiJiXiong、XiongMao)等名称,我们创建的时候,可以很容易的知道创建的熊的种类。与之相反的是构造器,构造器是没有名称的。

优势2:不必每次调用的时候都创建一个新对象

我们以Boolean.valueOf()为例:
这里写图片描述

Boolean A = Boolean.valueOf(true);
Boolean B = Boolean.valueOf(true);
我们从Boolean.valueOf()的源码可以看到,每次调用valueOf()时,其实返回的都是TRUE 或者 FALSE实例, 没有创建新的实例,是不是很炫^_^。

优势3:可以返回原返回类型的任何子类型

这里写图片描述

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

对比下面的构造器和静态工厂方法,是不是发现,使用静态工厂方法的更简洁^_^
这里写图片描述

第2条:遇到多个构造器参数时要考虑用构建器

需求:构造器有多个参数,前两个参数必选,后面的可选

方法1:重叠构造器

这里写图片描述

如果我只想设置第1、2、6参数的值,那我只能这样调用构造器了:
NutritionFacts cocaCola = new NutritionFacts(240, 8, 0, 0, 0, 27);
我们需要设置所有的参数,但实际上,我们只想设置3个参数而已。

方法2:Java Bean方式

这里写图片描述
这种方法也比较繁琐,最主要的是多线程并发访问的时候,由于初始化包含多条语句,很容易导致数据不一致。当然,我们可以通过额外的方法保证其线程安全,但这样也带来了额外的开销。

方法3:Builder模式

这里写图片描述
发现Builder模式的灵活性了吧,我们可以任意增加我们想设置的参数。

这周我们现讲到这儿,下周我们继续讲剩下的5条。。。

第3条:用私有构造器或者枚举类型强化Singleton属性

第4条:通过私有构造器强化不可实例化的能力

第5条:避免创建不必要的对象

第6条:消除过期的对象引用

第7条:避免使用终结方法

这里写图片描述
扫码关注订阅号“Java技术博文”,更多内容,等你来瞧!

原创粉丝点击