2015070705 - EffactiveJava笔记 - 第15条 使可变性最小(2)

原创 2015年07月07日 08:17:24

   函数做法,不改变对象本身;

   过程或命令做法,改变对象本身数据.

   不可变对象比较简单,因为其只有初始化时的状态,如果你能确保所有的构造器都建立这个类的约束关系,就可以确保约束关系在对象整个生命过程中不变.

   不可变对象本质上是线程安全的,它们不要求同步,不可变对象可以被自由地共享.鼓励客户端尽可能重用现有对象.

   如何做到这一点呢?

   1.频繁用到的值,提供公有静态final常量.

   2.对1的拓展,提供静态工厂,把频繁使用的对象缓存起来.

   不可变对象可以自由共享的影响是,永远不需要进行保护性拷贝.因为拷贝的对象永远是原始对象.

   不可变对象为其他对象提供大量的构件,无论可变还是不可变的对象.如果知道复杂类的内部组件对象不会改变,要维护它的不变性约束比较容易.

   不可变类真正唯一的缺点,对于每个不同的值都需要单独的对象,代价比较高昂.

   情景:如果执行多步骤操作,并且每个步骤都会产生新对象,除最终结果,其他都会被丢弃.性能问题摆在眼前,要如何处理呢?

   方式1.猜测经常用到哪些操作,将它们做基本类型提供,那么不可变类不必为每个步骤创建新的对象;

   方式2.如果可以预测执行哪些操作,使用包级私有可变配套类;如果不能准确预测,最好的办法提供公有的可变嵌套类.如String的可变配套类是StringBuilder.

版权声明:本文为博主原创文章,未经博主允许不得转载。

【Effective Java】Ch4_Class:Item15_使可变性最小化

不可变类是指其实例不可被修改的类。实例中的所有信息都是在创建实例时提供的,并且在对象生命周期内保持不变。JDK中有许多这种不可变类,例如String、基本类型包装类、BigInteger、BigDec...
  • vking_wang
  • vking_wang
  • 2013年11月07日 10:45
  • 2262

2015070704 - EffactiveJava笔记 - 第15条 使可变性最小(1)

20150707 星期二  北京     不可变类只是对象不能被修改的类,每个对象包含的信息必须在类创建实例的时候提供,并且在对象生命周期内不变.     为什么要存在不可变的类呢?不可变的类比可变类...
  • zhtzyh2012
  • zhtzyh2012
  • 2015年07月07日 07:43
  • 273

第15条:使可变性最小

术语: 不可变类:实例不能变修改的类。
  • u014723123
  • u014723123
  • 2014年06月30日 11:38
  • 433

第15条:使可变性最小化

不可变的类比可变的类更容易设计、实现和使用。 为了使类成为不可变,要遵循下面五条规则: 1、不要提供任何会修改对象状态的方法。 2、保证类不会被扩展。 3、使所有的域都是fin...
  • partner4java
  • partner4java
  • 2012年01月06日 15:42
  • 916

《Effective java》读书记录-第15条-使可变性最小化

不可变类是,其实例不能修改的类。每个实例所包含的信息都必须在创建该实例的时候提供,并在对象的整个生命周期内固定不变。 使类变成不可变类应该遵循的5条规则: 1.不要提供任何会修改对象状态的方法(mut...
  • sunyx1130
  • sunyx1130
  • 2016年01月11日 17:52
  • 379

Effective Java 第十五条:使可变性最小化

复数类Complex: public final class Complex { private final double re; private final double im; ...
  • u011459799
  • u011459799
  • 2016年04月20日 14:51
  • 328

第15条:使可变性最小化(创建不可改变类)

不可改变类是其实例对象不可改变,有人可能会想这还不简单,我们不提供改变对象 内部状态的API不就完了,没错,这是一个很重要的一条,但还有很多注意点 首先为什么要创建不可改变的类? 不可改变类比可...
  • jiang_bing
  • jiang_bing
  • 2012年04月05日 21:17
  • 324

系统集成项目管理工程师教程看书笔记2

1.1.2信息系统 1.系统的基本概念 系统具有以下几个特点: (1)目的性。定义一个系统、组成一个系统或者抽象出一个系统,都有明确的目标或者目的,目标性决定了系统的功能 (2)可嵌套型。系统可以包括...
  • zarathurstra
  • zarathurstra
  • 2017年02月24日 20:16
  • 609

2015070601 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(2)

公有类的属性,访问级别从包级变成保护级别(protected,private),增加可访问性的同时,受保护成员变成API一部分,必须永远得到支持.导出的类的受保护成员代表该类某个实现细节的公开承诺. ...
  • zhtzyh2012
  • zhtzyh2012
  • 2015年07月06日 08:25
  • 205

Effective Java之使可变性最小(十五)

为了使类变成可变类,需要遵循以下原则: 1.不要提供任何修改对象状态的方法。 2.保证类不会被扩展,声明类为final。 3.保证所有的域都是final的。 4.保证所有的域都是私有的。不可变...
  • qq_33394088
  • qq_33394088
  • 2017年12月19日 21:36
  • 24
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2015070705 - EffactiveJava笔记 - 第15条 使可变性最小(2)
举报原因:
原因补充:

(最多只允许输入30个字)