歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java設計模式心得筆記

最近一直在看《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

Copyright © Linux教程網 All Rights Reserved