更新時間:2020-08-21 11:59:42 來源:動力節點 瀏覽1469次
Java常用設計模式有幾種?想必java小白對這個問題也感到疑惑。這個問題動力節點java培訓機構的小編就來告訴大家。
簡單點說,就是一個應用程序中,某個類的實例對象只有一個,你沒有辦法去new,因為構造器是被private修飾的,一般通過getInstance()的方法來獲取它們的實例。
getInstance()的返回值是一個對象的引用,并不是一個新的實例,所以不要錯誤的理解成多個對象。單例模式實現起來也很容易,直接看demo吧。
public?class?Singleton?{
private?static?Singleton?singleton;
private?Singleton()?{
}
public?static?Singleton?getInstance()?{?
?if?(singleton?==?null)?{
??singleton?=?new?Singleton();
?}?
?return?singleton;
}
}
public?class?Singleton?{??
???private?static?Singleton?instance;??
???private?Singleton?(){}??
???public?static?synchronized?Singleton?getInstance()?{??
???if?(instance?==?null)?{??
???????instance?=?new?Singleton();??
???}??
???return?instance;??
???}??
}
public?class?Singleton?{??
???private?static?Singleton?instance?=?new?Singleton();??
???private?Singleton?(){}??
???public?static?Singleton?getInstance()?{??
???return?instance;??
???}??
}
public?class?Singleton?{??
???private?static?class?SingletonHolder?{??
???private?static?final?Singleton?INSTANCE?=?new?Singleton();??
???}??
???private?Singleton?(){}??
???public?static?final?Singleton?getInstance()?{??
???return?SingletonHolder.INSTANCE;??
???}??
}
public?enum?Singleton?{??
???INSTANCE;??
???public?void?whateverMethod()?{??
???}??
}
這種方式是Effective Java作者Josh Bloch 提倡的方式,它不僅能避免多線程同步問題,而且還能防止反序列化重新創建新的對象,可謂是很堅強的壁壘啊,不過,個人認為由于1.5中才加入enum特性,用這種方式寫不免讓人感覺生疏。
public?class?Singleton?{??
???private?volatile?static?Singleton?singleton;??
???private?Singleton?(){}??
???public?static?Singleton?getSingleton()?{??
???if?(singleton?==?null)?{??
???????synchronized?(Singleton.class)?{??
???????if?(singleton?==?null)?{??
???????????singleton?=?new?Singleton();??
???????}??
???????}??
???}??
???return?singleton;??
???}??
}
以上就是Java常用設計模式,大家都記住了嗎?
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習