單力設計模式(實例)

單例模式也是一種比較常見的設計模式,它到底能帶給我們什麼好處呢?其實無非是三個方面的作用:

     1、控制資源的使用,通過線程同步來控制資源的併發訪問;

     2、控制實例產生的數量,達到節約資源的目的。

     3、作爲通信媒介使用,也就是數據共享,它可以在不建立直接關聯的條件下,讓多個不相關的兩個線程或者進程之間實現通信。

單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種。

單例模式有一下特點:

1、單例類只能有一個實例。

2、單例類必須自己創建自己的唯一實例。

3、單例類必須給所有其他對象提供這一實例。

懶漢式:

package cn.Instance.impl;

public class Instance_1 {
    //在內存中緩存一個實例空間
    private static Instance_1 instance_1 =null;
    //收回外部類實例的權限
    private Instance_1(){
       
    }
    public static Instance_1 getInstance_1(){
        //對於線程不安全的代碼進行同步
        synchronized(Instance_1.class){
            //判斷是否存在類實例如果不存在就實例化一個
            if (instance_1==null) {
                instance_1=new Instance_1();
               
            }
        }
        //如果存在就返回已存在的
        return instance_1 ;
    }

}
餓漢式:

package cn.Instance.impl;

public class Instance_2 {
    //在類加載的時候就實例化一個類實例
    private Instance_2 instance_2=new Instance_2();
    //收回外部對於該類的實例化權限
    private Instance_2(){
       
    }
    //定義返回實例的方法
    public Instance_2 getInstance_2(){
        return instance_2;
    }
}
登記式——控制實例的數量:

package cn.Instance.impl;

import java.util.HashMap;
import java.util.Map;

public class Instance_3 {
    private static Map map=new HashMap();
    //定義當前實例個數
    private static int NUM=1;
    //定義最大實例個數
    private static int COUNT=3;
   
    public static Instance_3 getInstance_3() {
        Instance_3 instance_3=(Instance_3) map.get(NUM);
        //判斷是否存在實例
        if (instance_3==null) {
            instance_3=new Instance_3();
            map.put(NUM, instance_3);           
        }
        NUM++;
        //判斷是否超過限定的實例個數
        if (NUM>COUNT) {
            NUM=1;           
        }           
        return instance_3 ;
       
    }
   

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章