作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
1)使用场景:牵涉到对数据对象进行修改时,可能由于修改的顺序而造成数据的错乱,此时使用不变对象就可以避免,而且还可以不使用高开销的synchronizing方法。一个数据模型类的实例所持有的数据在整个生命周期中都不变,这个类就会是线程安全。
2)设计方法:
a)所有的实例变量都必须在构造函数中设置,因为构造函数是线程安全的。
b)将这个类设置为final,防止类由于继承而产生的类方法的覆盖。
c)所有的实例变量都必须设置为final,确保只在构造函数中一次设置。
d)若实例变量中包含有指向其他对象的引用,那么其对应的getter方法应该返回这个对象的拷贝,
3)实例:
public final class EmployeeModel {
//State
private final String firstName;
private final String lastName;
private final String SSN;
private final String address;
private final Car car;
//Constructor
public EmployeeModel(String fn, String ln, String ssn,String addr, Car c) {
firstName = fn;
lastName = ln;
SSN = ssn;
address = addr;
car = c;
}
//Getters
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String getSSN() {
return SSN;
}
public Car getCar() {
//return a copy of the car object
return (Car) car.clone();
}
public String getAddress() {
return address;
}
}