java設計模式——單例模式
阿新 • • 發佈:2019-02-15
單例模式:類只能有一個例項。
類的特點:1、私有構造器;2、內部構造例項物件;3、對外提供獲取唯一例項的public方法。
餓漢式單例特點:執行緒安全,不能延時載入
public class Person { //類初始化的時候直接例項化 多執行緒中也可保證 public static final Person person = new Person(); private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //建構函式私有化 private Person(){ } //提供一個全域性的靜態方法 public static Person getPerson(){ return person; } }
public class MainClass {
public static void main(String[] args) {
Person person = Person.getPerson();
Person person2 = Person.getPerson();
person.setName("zhangsan");
person2.setName("lisi");
System.out.println(person.getName());
System.out.println(person2.getName());
}
}
懶漢式 :對方法進行同步,但不同保證,在安全方面有欠缺
public class Person2 { private String name; private static Person2 person; public String getName() { return name; } public void setName(String name) { this.name = name; } //建構函式私有化 private Person2(){ } //提供一個全域性的靜態方法 多執行緒為保證需要同步方法 public static synchronized Person2 getPerson(){ if(person ==null){ person = new Person2(); } return person; } }
雙重檢查:對方法進行同步導致效率問題,只對核心部分進行同步
public class Person3 {
private String name;
private static Person3 person;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//建構函式私有化
private Person3(){
}
//提供一個全域性的靜態方法
public static Person3 getPerson(){
if(person ==null){
synchronized (Person3.class) {
if(person ==null){
person = new Person3();
}
}
}
return person;
}
}