最近一直在看《Head First設計模式》,這本書寫的確實是很不錯的,專注於怎麼用最簡單的方式最通俗的語言讓人了解設計模式。據說GoF的設計模式那本書寫的很好,是一本經典,但是就是難懂,這本書應該就是我們這些一看經典書就困的人的寶貝了。
Head First設計模式PDF高清完整中文版 下載見 http://www.linuxidc.com/Linux/2017-02/140536.htm
不過Head First系列並不專注於寫代碼,我就把自己學習的時候寫出來的代碼貼在這裡當做筆記吧,也方便搜到的人參考。
單例模式是我遇到的最多的模式了,這種模式大部分被利用在數據庫編程中,因為涉及到資源分配等原因,單例模式是一種非常好的模式。
下面是一段我實現的單例模式代碼,也是我們現在工程裡在用的,我就不打算寫什麼懶漢式啊,餓漢式啊的了。
package pattern;
public class Singleton {
private volatile static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
下面的代碼是它的測試代碼:
package pattern;
public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
String str = instance.toString();
System.out.println(str);
}
}
其實以前我很不理解單例模式為什麼叫做單例,為什麼這個類只會有一個實例存在。如果我在測試代碼裡聲明兩個變量如何呢?
結果後來我debug了一次代碼,我才知道了什麼叫做只有一個實例。那麼測試代碼改一下:
package pattern;
public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance1 = Singleton.getInstance();
String str = instance.toString();
String str1 = instance1.toString();
System.out.println(str);
System.out.println(str1);
}
}
打印出來的結果是一樣的。
debug的時候我發現這一句(Singleton instance1 = Singleton.getInstance();)的執行會在if (instance == null)這裡返回false,因此是不會重新new一個對象的,因此instance和instance1引用的其實是一個對象,這就是單例模式了。
現在發現學習寫代碼還是一定要debug的,跟一遍代碼邏輯,理解更深。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-02/140537p2.htm