【面向对象设计基础】不变对象

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

1)使用场景:牵涉到对数据对象进行修改时,可能由于修改的顺序而造成数据的错乱,此时使用不变对象就可以避免,而且还可以不使用高开销的synchronizing方法。一个数据模型类的实例所持有的数据在整个生命周期中都不变,这个类就会是线程安全。

2)设计方法:

a)所有的实例变量都必须在构造函数中设置,因为构造函数是线程安全的。

b)将这个类设置为final,防止类由于继承而产生的类方法的覆盖。

c)所有的实例变量都必须设置为final,确保只在构造函数中一次设置。

d)若实例变量中包含有指向其他对象的引用,那么其对应的getter方法应该返回这个对象的拷贝,

 

3)实例:

image

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

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

posted @ 2012-12-17 21:44  gnuhpc  阅读(353)  评论(0编辑  收藏  举报