关闭

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

标签: java
168人阅读 评论(0) 收藏 举报
分类:

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

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

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

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

   如何做到这一点呢?

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

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

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

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

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

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

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:83452次
    • 积分:4389
    • 等级:
    • 排名:第6838名
    • 原创:364篇
    • 转载:45篇
    • 译文:1篇
    • 评论:2条
    文章存档
    最新评论