首页 > 其他 > 详细

并发编程设计模式--Immutability模式

时间:2020-03-09 00:19:37      阅读:125      评论:0      收藏:0      [点我收藏+]

不变性(Immutability)模式

  所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。

一、如何让一个类具有不变性呢

  将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就具备不可变性了。更严格的做法是这个类本身也是 final 的,也就是不允许继承。因为子类可以覆盖父类的方法,有可能改变不可变性,所以推荐你在实际工作中,使用这种更严格的做法。实际上在Java SDK 经常用到的 String 和 Long、Integer、Double 等基础类型的包装类都具备不可变性。通过看源码,可以发现他们的类和属性都是 final 的,所有方法均是只读的

技术分享图片

 

 

你或许有疑问,String类里面有很多方法是可以修改字符串的。看过底层源码的小伙伴一定知道,String的SubString()  repleace()方法 都是会新创建对象的。

技术分享图片

 

 技术分享图片

 

 所有的修改操作都创建一个新的不可变对象,创建的对象太多了,太浪费内存,有没有什么办法可以解决呢?

二、利用享元模式可以减少创建对象的数量

如果你熟悉面向对象相关的设计模式,相信你一定能想到享元模式(Flyweight Pattern)。利用享元模式可以减少创建对象的数量,从而减少内存占用。Java 语言里面 Long、Integer、Short、Byte 等这些基本数据类型的包装类都用到了享元模式。

以下是Long中源码,缓存了-128-127之间的数字。

技术分享图片

 

 

在Integer中也是一样的

技术分享图片

 

并发编程设计模式--Immutability模式

原文:https://www.cnblogs.com/amberJava/p/12446010.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!