Android开发-设计模式-不变模式(Immutable)

介绍

        一个对象的状态在对象被创建之后就不再变化,这就是所谓的不变模式。

备注:这不属于“23种设计模式”。

模式的结构和实现

        一般地讲,一个对象要么是可变对象,要么是不可变对象。一个可变对象的状态可以改变,而一个不可变对象的状态不可改变。
        不变模式可增强对象的强壮型。不变模式允许多个对象共享某一对象,降低了对该对象进行并发访问时的同步化开销。如果需要修改一个不变对象的状态,那么就需要建立一个新的同类对象,并在创建时将这个新的状态存储在新对象里。
        不变模式只涉及到一个类。一个类的内部状态被创建后,在整个生命周期间都不会发生变化时,这样的类称作不变类。这种使用不变类的做法叫做不变模式。
        不变模式有两种形式:一种是弱不变模式,另一种是强不变模式。

弱不变模式

        一个类的实例的状态是不可变化的:但是这个类的子类实例具有可能变化的状态。这样的类符合弱不变模式的定义。

强不变模式

        一个类的实例的状态不会改变:同时它的子类的实例也具有不可变化的状态。这样的类符合强不变模式。那这样的类本身是final的或者这个类的所有方法应当是final。

“不变”和“只读”的区别

        “不变”(Immutable)与“只读”(Read Only)是不同的。当一个变量是“只读”时,变量的值不能直接改变,但是可以在其他变量发生改变的时候发生改变。
        比如,一个人的出生年月是“不变”属性。而一个人的年龄便是“只读”属性,但是不是“不变”属性。随着年龄的变化,一个人的年龄会随之变化,而人的出生年月则不会变化。这就是“不变”与“只读”的区别

Java中的不变模式

  • String类。String类是一个强不变类。
  • 封装类,如Integer、Float、Double、Byte、Long、Short、Boolean、Character(String类实际上是一个封装类,因为它封装了一个char数组)。这些封装类都是强不变类,这些类都是final的,在对象被从创建时它们蕴含的值(也就是它们的状态)就确定了。

优缺点

优点:易维护,线程安全
缺点:若需改变状态,需要创建一个新的同类对象。(参考String,享元模式)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值