最最簡單 功能健全,真正的單例模式

2021-10-20 01:50:39 字數 2195 閱讀 8078

三、總結

1、某個只能有乙個物件

2、必須自行建立這個例項

3、必須向整個系統提供這個例項

4、基於多執行緒也適用

**如下(建立乙個建構函式):

public

class

singleinstance

}

**如下(測試):

public

class

test01

}

**如下(執行結果):

我是乙個建構函式片
**如下(改變建構函式的修飾詞):

public

class

singleinstance

}

**如下(測試是報錯的):

public

class

test01

}

由private修飾的建構函式在測試中是不能初始化的,所以只能再想辦法

public

class

singleinstance

public

static singleinstance getsingleinstance()

}

由於建構函式是由private修飾的所以只能採取提供方法來訪問,目前優先想到的是由static一起修飾的方法,訪問格式是:類名.方法名 但是static修飾有自己的侷限性,所以想要達到預期效果同步效果,成員變數也得是static來修飾,否則方法載入成功但是成員變數還沒有載入,就會出現報錯。

public

class

singleinstance

public

static singleinstance getsingleinstance()

}

public

class

singleinstance

public

static

synchronized singleinstance getsingleinstance()

}

**如下(測試):

public

class

test01

}

在這之後要在加乙個鎖的存在,因為如不加鎖在多執行緒場景中,執行緒的訪問時隨機的,可能會有乙個或多個執行緒進入到提供訪問的公有方法中,那麼單例模式就不存在,在最後我們總算得到了自己想要看到的結果,但是還是有不足那就是static修飾的通病就是如果載入進去用不到那就是佔資源,所以為了解決這一毛病,我們可以在成員變數直接將初始化賦予null ,在提供訪問的方法這裡進行乙個判斷如果需要訪問了就會進行判斷,開始進行初始化,不需要則就不初始化,佔資源的問題就迎刃而解了!!!

**如下(優化):

public

class

singleinstance

public

static

synchronized singleinstance getsingleinstance()

return singleinstance;

}}

**如下(測試):

public

class

test01

}

**如下(測試結果):

我是乙個建構函式

com.etime03.singleinstance@70dea4e

com.etime03.singleinstance@70dea4e

com.etime03.singleinstance@70dea4e

其實就是在懶漢式的成員變數**改了一下再加乙個final修飾,判斷不需要了,其他的都一樣的。

public

class

singleinstance

public

static singleinstance getsingleinstance()

}

以前寫的單例模式由於沒有學到多執行緒,所以是拙劣的,目前學到了多執行緒就知道,還有乙個多執行緒場景需要考慮到,特來加上乙個同步函式的公有訪問方法以備完善。

單例模式的簡單demo

c 版本 餓漢模式 include using namespace std class r public static r getinstance r r instance new r 1.建構函式放在非public控制許可權下 2.保證物件始終值存在乙個 讓物件始終存在於靜態區 3.對外部提供乙個...

最簡單的單例模式

1.啥是單例模式?答 單例模式就是乙個類只有乙個例項 2.為啥不用全域性變數來實現呢?答 因為單例模式既能有全域性變數的優點,可以全域性訪問,但是沒有全域性變數的缺點 3.啥缺點?答 如果我們要在乙個全域性指令碼中放乙個物件,那麼我們要在程式執行前就建立好,如果是開發遊戲,我們要在遊戲執行前建立好這...

最簡單的單例模式

如果乙個類始終只能建立乙個例項,則這個類被稱為單例類。在一些特殊的場景下,要求不允許自由建立該類的物件,而是只允許為該類建立乙個物件。為了避免其他類自由建立該類的例項,我們把該類的構造器使用private修飾,從而把該類的所有構造器隱藏起來。根據良好封裝的原則 一單把該類的構造器隱藏起來,則需要提供...