天天看點

【面向對象設計基礎】不變對象

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;

}

繼續閱讀