Java基礎之:單例模式
阿新 • • 發佈:2020-12-13
設計模式
設計模式是在大量的實踐中總結和理論化之後優選的程式碼結構、程式設計風格、以及解決問題的思考方式 。設計模式就像是經典的棋譜,不同的棋局,我們用不同的棋譜,免去我們自己再思考和摸索。
單例模式
實現步驟:
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就是經典的單例模式。