Immutable:想破坏它也没有办法
简介
永恒的,不变的
设计
1。类声明为final
不允许定义它的子类,预防子类可能修改字段值
2。类成员访问变量为private
预防其他类擅自修改字段值
什么情况下使用
1。实例产生后,状态不再变化时
2。实例需要共享,而且访问很频繁时
高级应用
成对的mutable和immutable类
如String和StringBuffer
优点
不需要使用synchronized保护,性能高
可能危及类不变性操作
直接以get方法返回字段所保存的实例
将构造器的参数传入的实例,直接存在字段里
public class Main {
public static void main(String[] args) {
Person alice = new Person("Alice", "Alaska");
new PrintPersonThread(alice).start();
new PrintPersonThread(alice).start();
new PrintPersonThread(alice).start();
}
}
public final class Person {
private final String name;
private final String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String toString() {
return "[ Person: name = " + name + ", address = " + address + " ]";
}
}
public class PrintPersonThread extends Thread {
private Person person;
public PrintPersonThread(Person person) {
this.person = person;
}
public void run() {
while (true) {
System.out.println(Thread.currentThread().getName() + " prints " + person);
}
}
}