不可变对象:
1:一旦创建,对象的状态就不能被修改,任何的修改都会创建一个新的对象
2:类和类属性都应该是final类型
3:如果里面含有非immutable对象,那么客户端的调用都应该返回一个该对象的拷贝
不可变对象的好处:
1:线程安全
2:创建的对象可以做缓存处理,使用静态工厂方法valueOf()返回一个已经存在的对象
例一:
public final class ImmutableObject_1 {
private final Date date;
public ImmutableObject_1(Date date){
this.date = new Date(date.getTime());
}
public Date getDate(){
return (Date)date.clone(); //返回可变属性的拷贝
}
}
例二:
public class ImmutableObject_2 {
private final Name name;
public ImmutableObject_2(Name name){
//this.name = name; 不能这样写
this.name = new Name(name.getFirstName(), name.getLastName());
}
public Name getName(){
return name.clone(); //返回可变属性的拷贝
}
public static void main(String[] args) {
Name name = new Name("Jason", "Lin");
ImmutableObject_2 immutable = new ImmutableObject_2(name);
System.out.println(immutable.getName().getFirstName());
immutable.getName().setFirstName("Harry");
System.out.println(immutable.getName().getFirstName());
}
}
class Name implements Cloneable{
private String firstName;
private String lastName;
public Name(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Name clone(){
return new Name(this.firstName, this.lastName);
}
}