且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-09-20 11:20:31

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




本文转自gnuhpc博客园博客,原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822393.html,如需转载请自行联系原作者