案例(修改前):
package com.atsico.package04;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import org.junit.Test;
public class Test01 {
@Test
public void test_01() {
Work work = new Work();
work.setDate(new Date());
Date date_ = work.getDate();
System.out.println("date1:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date_));
date_.setDate(1);
System.out.println("date2:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date_));
}
}
class Work {
private Date date;
public void setDate(Date date) {
this.date = date;
}
public Date getDate() {
return this.date;
}
}
案例(修改后):
package com.atsico.package04;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import org.junit.Test;
public class Test01 {
@Test
public void test_01() {
Work work = new Work();
work.setDate(new Date());
Date date_ = work.getDate();
System.out.println("date1:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date_));
date_.setDate(1);
System.out.println("date2:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date_));
}
}
class Work implements Cloneable {
private Date date;
public void setDate(Date date) {
this.date = date;
}
/* 引用可变对象破坏封装,利用克隆解决这个问题 */
public Date getDate() {
return (Date) this.date.clone();
}
}
重点:Work类中数据封装性得不到保障。没有修改之前date_更改器改变了Work对象的状态,如下图: