Java基礎之:單例模式
設計模式
設計模式是在大量的實踐中總結和理論化之后優選的代碼結構、編程風格、以及解決問題的思考方式 ,設計模式就像是經典的棋譜,不同的棋局,我們用不同的棋譜,免去我們自己再思考和摸索,
單例模式
對于一個類而言,外部只能獲取其一個實體,
實作步驟:
1) 構造器私有化
2) 類的內部創建物件
3) 向外暴露一個靜態的公共方法,getDog,getCat,
簡單案例
package codeBlock;
?
public class Singleton {
?
public static void main(String[] args) {
Dog dog1 = Dog.getDog();
Dog dog2 = Dog.getDog();
System.out.println(dog1.getName()); //旺財
System.out.println(dog2.getName()); //旺財
System.out.println(dog2 == dog1); //true
Cat cat1 = Cat.getCat();
Cat cat2 = Cat.getCat();
System.out.println(cat1.getName()); //布偶
System.out.println(cat2.getName()); //布偶
System.out.println(cat2 == cat1); //true
}
?
}
?
//餓漢模式:宣告一個物件,將其初始化并作為一個靜態屬性,在外部需要此類物件時,直接回傳此物件,
class Dog{
private String name;
private static Dog dog = new Dog("旺財"); //靜態屬性,所以只有一個dog
private Dog(String name) {
this.name = name;
}
public static Dog getDog() {
return dog;
}
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
}
?
//懶漢模式:宣告一個物件,并作為一個靜態屬性,在外部需要此類物件時將其初始化,再回傳此物件,
class Cat{
private String name;
private static Cat cat ; //靜態屬性,所以只有一個cat
private Cat(String name) {
this.name = name;
}
public static Cat getCat() {
if(cat == null) {
cat = new Cat("布偶");
}
return cat;
}
public String getName() {
return name;
}
?
public void setName(String name) {
this.name = name;
}
}
餓漢模式與懶漢模式
-
二者最不同的點在于物件宣告的時機,餓漢模式是在類加載時,就宣告并初始化一個物件作為靜態變數,而懶漢模式是在類加載時宣告一個靜態屬性,在外部需要實體時再創建物件,
-
餓漢式不存在執行緒安全問題,懶漢式存在執行緒安全問題,
-
餓漢式存在浪費資源的可能,因為如果程式員一個物件實體都沒有使用,那么餓漢式創建的物件就浪費了,懶漢式是使用時才創建,就不存在這個問題,
-
java.lang.Runtime就是經典的單例模式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234129.html
標籤:其他
上一篇:Java基礎之:OOP——代碼塊
