singletons

今天在查資料的時候,看到這種寫法,酷。

一般在java中,Singleton的寫法會長這樣:

public class Singleton {

static Singleton instance;

public static Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}

}

這樣每次都會判斷 instance 是否等於null, 但是其實只有第一次要而已。 所以可以改成下面這樣:

public class Something
{
private Something()
{
}

private static class LazyHolder
{
private static final Something something = new Something();
}

public static Something getInstance()
{
return LazyHolder.something;
}
}

這樣就不會每次都判斷了,而JVM的spec保證,something只有在第一次getInstance被呼叫的時候 才會被初始化:P (效率也比較好)

真是太酷了。

refer:

http://www.oreillynet.com/onjava/blog/2007/01/singletons_and_lazy_loading.html

http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s