什么是設計模式
-
靜態方法和屬性的經典使用
-
設計模式是:在大量的實踐中總結和理論化之后優選的代碼結構、編程風格以及解決方法
什么是單例模式
-
單個實體的設計模式
-
所謂類的單例設計模式,就是采用一定的方法保證在整個的軟體系統中,對某個類只能存在一個物件的實體,并且該類只提供一個取得其物件實體的方法
單例模式的分類:
-
餓漢式
-
懶漢式
餓漢式與懶漢式的區別
-
二者最大的區別是:創建時機不同:餓漢式在類加載的時候就創建了物件實體,而懶漢式是在使用時才存在
-
餓漢式不存在執行緒安全問題,懶漢式存在執行緒安全問題-----(當多個執行緒同時進入判斷時)
-
餓漢式存在浪費資源的可能,因為如果程式員一個物件實體都沒有使用,那么餓漢式創建的物件就浪費了,懶漢式是使用時才創建,就不存在這個問題
-
javaSE標準類中,java.lang.Runtime就是經典的單例模式
餓漢式
步驟實作:
-
構造器私有化
-
類的內部創建物件
-
向外暴露一個靜態的公共方法,getInstance
代碼實作:
/**
* 餓漢式
* 1. 構造器私有化-----防止在類的外部直接創建
* 2. 在類的內部創建物件(該物件是靜態的)
* 3. 向外暴露一個靜態的公共方法,getInstance
* 他為什么是餓漢式
* 因為:
* 當呼叫類的靜態變數時,會導致類被加載,靜態的物件會被執行,靜態物件一執行,那么這個物件就會存在了
*/
public class SingleTon01 {
public static void main(String[] args) {
Cat instance = Cat.getInstance();
System.out.println(instance);
Cat instance1 = Cat.getInstance();
System.out.println(instance1);
//instance物件與instance1同一個物件
System.out.println(instance==instance1);//true
}
}
class Cat{
private String name;
public static int n1 = 100;
//為了在靜態方法中,回傳其物件,需要將其修飾為靜態方法
//物件,通常為重量級的物件,餓漢式可以會造成創建了物件,但沒有使用,會造成資源的浪費
private static Cat cat = new Cat("小紅");
private Cat(String name) {
this.name = name;
}
public static Cat getInstance(){
?
return cat;
}
?
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
懶漢式
步驟:
-
1.構造器私有化
-
2.定義一個私有的靜態屬性物件
-
3.提供一個public 的static方法---中間加判斷
代碼實作:
/**
* 懶漢式
*
* 當類被呼叫是,不會創建物件,需要自己呼叫,后面再次呼叫,會回傳上次創建的物件,從而保證了單例
*/
public class SingleTon02 {
public static void main(String[] args) {
Dog instance = Dog.getInstance();
System.out.println(instance);
//第二次呼叫的時候,會得到上次創建的物件
Dog instance1 = Dog.getInstance();
System.out.println(instance1);
System.out.println(instance==instance1);//true
}
}
class Dog{
private String name;
private static Dog dog;
private Dog(String name) {
this.name = name;
}
public static Dog getInstance(){
if(dog == null){
dog = new Dog("大黃");
}
return dog;
}
?
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
'}';
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299314.html
標籤:Java
上一篇:DMA 與零拷貝技術
