Java 中設計模式 (單例模式) 介紹
需求 :保證了一個類在記憶體中只能有一個物件
思路:1、如果其他程式能夠隨意用new建立該類物件,那麼就無法控制個數。因此,不讓其他程式用new建立該類的對象。
2、既然不讓其他程式new該類物件,那麼該類在自己內部就要建立一個物件,否則該類就永遠無法建立物件了。
3、該類將建立的物件對外(整個系統)提供,讓其他程式獲取並使用。
解決步驟:1、 將該類中的建構函式私有化。
2、在本類中建立一個本類物件。
3、定義一個方法,返回值型別是本類型別。讓其他程式通過該方法就可以獲取到該類物件。
單例的設計模式包括:
餓漢式
懶漢式
餓漢式 介紹:
在開始時就 new 物件
簡單程式碼實現
package cn.hncu.designl.sigal;
//餓漢式
public class P1 {
private static final P1 p=new P1();//為了不讓直接訪問,將其私有化
private P1(){};//構造方法私有化
public static P1 get(){//通過類名可以掉這個方法,從而可以訪問到私有的建構函式
System.out.println("11111111");
return p;//返回可以造物件的p
}
}
懶漢式:
和餓漢式不同,再呼叫的時候進行判斷 new物件;
在判斷時候需要將其上鎖,不然會出現問題(本人清測)
執行緒A希望使用SingletonClass,呼叫getInstance()方法。因為是第一次呼叫,A就發現instance是null的,於是它開始建立例項,就在這個時候,CPU發生時間片切換,執行緒B開始執行,它要使用SingletonClass,呼叫getInstance()方法,同樣檢測到instance是null——注意,這是在A檢測完之後切換的,也就是說A並沒有來得及建立物件——因此B開始建立。B建立完成後,切換到A繼續執行,因為它已經檢測完了,所以A不會再檢測一遍,它會直接建立物件。這樣,執行緒A和B各自擁有一個SingletonClass的物件——單例失敗!
package cn.hncu.designl.sigal;
public class P2 {
private static P2 p=null;//與餓漢式不一樣,這裡先不要new 物件,但是同樣的私有化
private P2(){}//私有化
public static synchronized P2 getinstance(){//若是多執行緒會出現錯誤(本人清測),所以需要synchronized將其鎖起來
if(p==null){//為空就直接new 物件
p=new P2();
}
return p;//返回 造的物件
}
}
設計思想高深,這個只是簡單的用程式碼稍微的演示下,下面是呼叫上面的測試程式
package cn.hncu.designl.sigal;
public class test {
public static void main(String[] args) {
P1 p1=P1.get();
P1 p2=P1.get();
System.out.println(p1==p2);//餓漢式單模式//直接就賦值
//懶漢式
P2 p3=P2.getinstance();//類名直接調
P2 p4=P2.getinstance();
System.out.println(p3==p4);
}
}
相關文章
- JAVA設計模式 1 設計模式介紹、單例模式的理解與使用Java設計模式單例
- Java設計模式-單例模式Java設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- Java設計模式–單例模式Java設計模式單例
- Java常用設計模式-單例模式Java設計模式單例
- java設計模式-單例模式SingletonJava設計模式單例
- Java設計模式之單例模式Java設計模式單例
- Java設計模式——單例模式(建立型模式)Java設計模式單例
- java單例設計模式Java單例設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- java設計模式其一 單例模式Java設計模式單例
- java設計模式一一設計模式的簡介和介紹Java設計模式
- 折騰Java設計模式之單例模式Java設計模式單例
- 設計模式 單例模式設計模式單例
- 設計模式——單例模式設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式-單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式(單例模式)設計模式單例
- [java設計模式]破解單例設計模式,禁止偷生、超生!Java設計模式單例
- 設計模式-單例模式、多例模式設計模式單例
- 直播軟體搭建,Java設計模式單例模式Java設計模式單例
- java23種設計模式—— 二、單例模式Java設計模式單例
- 設計模式之單例設計模式設計模式單例
- 設計模式之單例模式設計模式單例
- 常用設計模式-單例模式設計模式單例
- 設計模式之---單例模式設計模式單例
- 設計模式(二)——單例模式設計模式單例
- 001設計模式:單例模式設計模式單例
- # Python設計模式 單例模式Python設計模式單例
- 設計模式一(單例模式)設計模式單例
- 設計模式之☞單例模式設計模式單例
- Python設計模式——單例模式Python設計模式單例
- 設計模式—singleton(單例模式)設計模式單例
- python設計模式-單例模式Python設計模式單例