1. 程式人生 > >java設計模式——單例模式

java設計模式——單例模式

        單例模式:類只能有一個例項。

  類的特點: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;
	}

}