摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 但願轉載,保留摘要,謝謝!html
單例模式是一種對象建立型模式,使用單例模式, 能夠保證爲一個類只生成惟一的實例對象。也就是說, 在整個程序空間中,該類只存在一個實例對象。 其實,GoF對單例模式的定義是:保證一個類、 只有一個實例存在,同時提供能對該實例加以訪 問的全局訪問方法。java
在應用系統開發中,咱們經常有如下需求:設計模式
- 在多個線程之間,好比servlet環境,共享同一個資源或者操做同一個對象函數
- 在整個程序空間使用全局變量,共享資源性能
- 大規模系統中,爲了性能的考慮,須要節省對象的建立時間等等。this
由於Singleton模式能夠保證爲一個類只生成惟一的實例 對象,因此這些狀況,Singleton模式就派上用場了。spa
1.餓漢式。線程
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; } }
2.懶漢式。設計
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 Person2 getPerson() { if(person == null) { person = new Person2(); } return person; } }
3.雙重檢查。code
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 synchronized Person3 getPerson() { if(person == null) { person = new Person3(); } return person; } }
public class Person4 { private String name; private static Person4 person; public String getName() { return name; } public void setName(String name) { this.name = name; } //構造函數私有化 private Person4() { } //提供一個全局的靜態方法 public static Person4 getPerson() { if(person == null) { synchronized (Person4.class) { if(person == null) { person = new Person4(); } } } return person; } }
MainClass:
public class MainClass { public static void main(String[] args) { Person2 per = Person2.getPerson(); Person2 per2 = Person2.getPerson(); per.setName("zhangsan"); per2.setName("lisi"); System.out.println(per.getName()); System.out.println(per2.getName()); } }
來自:java設計模式
如以上文章或連接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章。