1,單例模式

2022-05-02 01:12:11 字數 3275 閱讀 3059

第一,單例模式是什麼?

第二,為什麼要使用單例模式?

第三,怎樣使用單例模式?

第四,單例模式的應用場景

第一,單例模式是什麼?

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例類的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。

顯然單例模式的要點有三個:

一是某個類只能有乙個例項;

二是它必須自行建立這個例項(當前類中建立);

三是它必須自行向整個系統提供這個例項(通過乙個方法介面)。

第二,為什麼要使用單例模式?    確保物件的唯一性          入手確保物件的唯一性呢????

單例模式可以控制單例數量;可以進行有意義的派生;對例項的建立有更自由的控制;

第三,怎樣使用單例模式?

通過乙個例項來說明(控制台應用程式)(有如下幾種方式:)

1.  私有的靜態變數(被呼叫類)

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

using

system.threading.tasks;

namespace

singletonpattern

",thread.currentthread.managedthreadid);

}private

static singleton _singleton = null

;private

static

object singleton_lock = new

object

();

public

static

singleton createinstance() //雙null}}

return

_singleton;

}public void show()

.show", this.gettype().name);

} }

}

呼叫類:  使用多執行緒的方式

listtasklist = new list();  //

提供任務列表

taskfactory taskfactory = new

taskfactory();

tasklist.add(taskfactory.startnew(() =>));

task.waitall(tasklist.toarray());

//等待所有任務完成

2.靜態建構函式:由clr保證,在第一次使用這個類之前,呼叫而且只呼叫一次

被呼叫類:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

using

system.threading.tasks;

namespace

singletonpattern

被構造,執行緒id=

", this

.gettype().name, thread.currentthread.managedthreadid);

}private

static singletonsecond _singleton = null

;

//////

靜態建構函式:由clr保證,在第一次使用這個類之前,呼叫而且只呼叫一次

/// static

singletonsecond()

public

static

singletonsecond createinstance()

public

void

show()

.show

", this

.gettype().name);}}

}

3.靜態變數:會在型別第一次使用的時候初始化,而且只初始化一次

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

using

system.threading.tasks;

namespace

singletonpattern

被構造,執行緒id=

", this

.gettype().name, thread.currentthread.managedthreadid);

}//////

靜態變數:會在型別第一次使用的時候初始化,而且只初始化一次

/// private

static singletonthird _singleton = new

singletonthird();

public

static

singletonthird createinstance()

public

void

show()

.show

", this

.gettype().name);}}

}

4.global.asax中也可以寫(英文是啟動項)

第四,單例模式的應用場景

單例模式應用的場景一般發現在以下條件下:

(1)資源共享的情況下,避免由於資源操作時導致的效能或損耗等。如上述中的日誌檔案,應用配置。

(2)控制資源的情況下,方便資源之間的互相通訊。如執行緒池等。

1 單例模式

乙個類只能有乙個例項。比如印表機這種東西。trick在於 變數,構造方法都必須為private,所以其他類new它的構造方法是不行的,直接呼叫變數也不行。只能呼叫getinstance 方法 其他被public修飾的方法。getinstance 方法記得用public修飾。原理 public cla...

1 單例模式

某個物件只需要乙個例項的情況,比方說gamemanager,resourcemanagerusing system namespace 單例模式 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點 public static singleton getinstance 構造...

單例模式1

1 餓漢式 author version 0.1 單例模式 餓漢式 建立時進行例項化 1 私有化構造方法 2 建立私有例項 static 3 建立公共類方法 static 方法輸出單例 public class singleton5 公共方法 public static singleton5 get...