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

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

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

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

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

   如何做到这一点呢?

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值