如何通關設計模式之單例模式

2021-09-03 09:57:24 字數 1472 閱讀 7872

單例模式可謂是設計模式中最簡單的乙個,沒有之一。它的作用也跟其名一樣,單例單例,只能生成乙個該類的例項。通常我們可以使用new來建立物件,想要多少女朋友就new多少女朋友。但是現在不行了,單例模式規定,你只准有乙個女朋友。於是乎…

現在我們想要有乙個女朋友,而且必須有且僅有乙個,多了在一起會打架,所有我們現在該怎麼做呢。

public

class

girlfriend

public

static girlfriend getgirlfriend()

}

通過定義乙個私有訪問許可權的建構函式,避免被別的類new出來乙個女朋友,而只能通過girlfriend自己new乙個物件出來。通過對外提供乙個靜態的方法,可以返回該類自己new出來的物件。

好了,不用通過我們自己了new女朋友,這個女朋友就已經來到我們身邊了,只需要通過girlfriend.getsingleton()就可以牽著她的手去看星星看月亮了。

這種單例模式又稱為餓漢式單例

優點:

缺點:對於上面的單例模式,不會出現執行緒同步問題,但是,下面這個…

public

class

girlfriend

public

static girlfriend girlfriend()

return girlfriend;

}}

當我們正要獲得女朋友,執行到**girlfriend = new girlfriend()時,此刻還沒有獲得到女朋友物件,突然來了另外乙個人也想要女朋友,且已經執行到了(girlfriend == null),這時他獲得判斷條件為真,於是我們兩個一起執行下去,我獲得了乙個女朋友,他也獲得了乙個女朋友,雖然這是件皆大歡喜的事,可是,單例模式規定了只能存在乙個女朋友。為了讓別人不能有女朋友,我們可以這樣做

public

class

girlfriend

//使用synchronized修飾

public

static girlfriend girlfriend()

}}return girlfriend;

}}

沒錯,我們可以使用synchronized,要想獲得女朋友,就必須要先獲得監視器鎖,這樣可以避免在多執行緒下產生的執行緒同步問題。當然了我們也可以用synchronized直接修飾獲得女朋友的方法。這種單例也叫做懶漢式單例。

對於個人而言餓漢式單例更為實用,它不僅不需要考慮同步問題,也避免了加鎖帶來的資源浪費。單例模式看起來還是十分簡單的,在許多場景下我們都會看到單例模式的使用:

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...