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;
}