不变模式只涉及一个类;
此类的内部状态创建后,整个生命周期都不会发生变化;
如何改变一个不变对象的状态?
新建一个该对象,并在创建时将状态存储到该对象中;
弱不变模式、强不变模式
弱不变模式:
一个类的实例状态是不可变的,但是其子类实例却是可以变的;
①满足条件
<1>对象的改变只能在构造方法中调用,无任何方法可以改变对象的状态,即当通过构造方法后,对象的状态以及其他信息就已经确定且不可更改了;
<2>所有属性都是private的;
<3>如果引入的对象是可变的,必须保证外界无法修改此对象,引入的对象的初始化放在此类中,不要在客户端进行初始化;如果一定要客户端进行初始化,则在初始化不变类时,复制一份可变对象进行传入,不要使用原来的;
强不变模式:
①满足条件:
<1>首先要满足弱不变模式的条件;
<2>所有方法全都是final,也就是不能被重写;
<3>类本身就是final的,类不可被继承,即没有子类;