先說一下單例模式,單例模式有兩種,一種時懶漢式(有執行緒安全問題),另一種式餓漢式(無線程安全問題)。
懶漢式可以通過加鎖解決安全問題,如下兩端**,第一段式有執行緒安全問題的,一年前lz去面試被要求手寫單例模式的時候就是這樣寫的,被面試官狠狠的鄙視了一波。
package test;
/** * @author mzl
* */
public class singleton
public static singleton getinstance()
return instance;}}
經過面試官指正後,加鎖
public class singleton
public static singleton getinstance()}}
return instance;}}
接下來把單例用到工廠模式式去,比如我們工廠模式要生產one、tow、three三個物件,我們可以定義乙個介面,讓它們都實現這個介面,同時為了**更容易維護,使用註解方式,來標記以上三個類。
一、定義乙個介面
public inte***ce strategy
二、自定義乙個註解
@retention(value = retentionpolicy.runtime)
@target(elementtype.type)
public @inte***ce pay
@reteniton的作用是定義被它所註解的註解保留多久,一共有三種策略,定義在retentionpolicy列舉中
@target表示作用什麼地方。
三、one、tow、three三個類**如下
@pay(channlid = 1)
public class one implements strategy
@override
public string str2()
}@pay(channlid = 3)
public class two implements strategy
@override
public string str2()
}@pay(channlid = 2)
public class three implements strategy
@override
public string str2()
}
四、市場工廠單例模式去生成以上三個類
public class testfactory
//餓漢式
private static class singletontest
public static testfactory gettestfactory()
//存放class路徑
public static mapmap=new hashmap();
static
} //具體生產方法
public strategy create(integer id) throws exception
}
五、測試看看生成出來的物件
public class testmain catch (exception e)
}
結果如下
Java單例模式 懶漢式和餓漢式
單件模式屬於工廠模式的特例,只是它不需要輸入引數並且始終返回同一物件的引用。1 當類只能有乙個例項而且客戶可以從乙個眾所周知的訪問點訪問它時。2 當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改 就能使用乙個擴充套件的例項時。下面對單件模式的懶漢式與餓漢式進行簡單介紹 1 餓漢式 在...
Java單例模式 懶漢式和餓漢式
單件模式用途 單件模式屬於工廠模式的特例,只是它不需要輸入引數並且始終返回同一物件的引用。如果我們能夠保證系統中自始至終只有唯一乙個資料庫連線物件,顯然我們會節省很多記憶體開銷和cpu利用率。這就是單件模式的用途。當然單件模式不僅僅只用於這樣的情況。在 設計模式 可復用物件導向軟體的基礎 一書中對單...
Java設計模式 單例模式(餓漢式 懶漢式)
單例模式 所謂單例模式,從字面意思上來講就是只有乙個例項物件。特點 單例類只能有乙個例項。單例類必須自己建立自己的唯一例項。單例類必須給所有其他物件提供這一例項。單例模式必須確保只有乙個例項化物件,而且自行提供例項化並提供公共的獲取例項化物件的方法。餓漢式 餓漢式單例模式 class eager 提...