單例模式7種實(shí)現(xiàn)
單例模式

1 、介紹:
單例模式(Singleton)也叫單態(tài)模式,是設(shè)計(jì)模式中最為簡(jiǎn)單的一種模式,甚至有些模式大師都不稱其為模式,稱其為一種實(shí)現(xiàn)技巧,因?yàn)樵O(shè)計(jì)模式講究對(duì)象之間的關(guān)系的抽象,而單例模式只有自己一個(gè)對(duì)象,也因此有些設(shè)計(jì)大師并把把其稱為設(shè)計(jì)模式之一。
2 、應(yīng)用場(chǎng)景:
3、七種實(shí)現(xiàn)方法:
1、
package Singleton;
public class SingletonOne {
private SingletonOne(){}
private static class LazyHolder{
private static final SingletonOne INSATNCE=new SingletonOne();
}
public static SingletonOne getInstance(){
return LazyHolder.INSATNCE;
}
}
2、
package Singleton;
public class SingletonTwo {
private SingletonTwo(){};
private static final SingletonTwo INSTANCE=new SingletonTwo();
public static SingletonTwo getInstance(){
return INSTANCE;
}
}
3、
package Singleton;
public class SingletonThree {
private static final SingletonThree instance ;
static{
try{
instance=new SingletonThree();
}catch(Exception e){
throw new RuntimeException("an error occurred!");
}
}
public static SingletonThree getInsance(){
return instance;
}
private SingletonThree(){}
}
4、
package Singleton;
public enum SingletonFour {
INSTANCE;
public void execute(String arg){
}
}
5、
package Singleton;
public class SingletonFive {
private static Volatile SingletonFive instance;
private SingletonFive(){}
public static SingletonFive getInstance(){
if(instance==null){
synchronized (SingletonFive.class) {
if(instance==null){
instance=new SingletonFive();
}
}
}
return instance;
}
}
6、
使用apache commons lang: LazyInitializer
public class SingletonSix extends LazyInitializer
@Override
protected ComplexObject initialize() {
return new ComplexObject();
}
}
// Create an instance of the lazy initializer
SingletonSix initializer = new SingletonSix();
...
// When the object is actually needed:
ComplexObject cobj = initializer.get();
7、
使用guava:
private static final Supplier
@Override
public String get() {
//do some init
String result = xxx;
return result;
}
});
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。