Immutable pattern (我是安全的,不会变,大胆拿去用吧) immutable意味不可改变的。了解Immutable 设计模式,其实就是了解Immutable类什么是immutable类呢?Immutable类其实是个绝对安全的类,无论多少个线程对他进行访问,他的成员变量值都是不会改变的,所以了解immutable类就成为了理解immutable的关键。 下面的代码描述了一个简单的immutable类 public final class ImmutablePerson { private final String name; private final String address; public ImmutablePerson(String name, String address) { this.name = name; this.address = address; } public ImmutablePerson(MutablePerson person) { this.name = person.getName(); this.address = person.getAddress(); } public MutablePerson getMutablePerson() { return new MutablePerson(this); } public String getName() { return name; } public String getAddress() { return address; } Immutable类,没有任何方式能对类的对象进行修改,所以不需要同步锁。Immutable类本身就是线程安全的。 虽然用final修饰immutable类不是必要的,但是可以防止被子类继承,从而进行修改。 Immutable类中 变量都用private final修饰,private表示只能有类内部进行访问 如果一个类中如果含有一个mutable类,想让这个类成为immutable类,就必须在构造方法的时候,不能把对象直接穿进去,而是利用传入对象的参数,再构造器中new一个mutable类的实例,这样就能保证这个类的成员不用因为,构造器中传入对象的改变而改变,而使之成为一个immutable类
|