單例模式:乙個類在記憶體中只有乙個物件(例項),並且提供乙個可以全域性訪問或者獲取這個物件的方法。
這兩天學的,寫了個小例子,問了同事一些關於執行緒的問題,還有從網上查了一些資料。還犯了一些低階的錯誤。
vs2017控制台輸出文字亂碼,從網上找了一些方法不管用,最後發現是自己新建專案選錯模板了,選擇了.net core的模板,所以才會輸出亂碼,大家一定要吸取教訓。
直接上**
演示類,person.cs
public客戶端**:class
person
",gettype().name);
}public
static
person getinstance()
}
", object.referenceequals(person1, person2));輸出結果:}
只輸出了一次,兩個物件引用相等。說明單例模式沒問題。
高階:
public客戶端呼叫**:class
person "
,gettype().name);
}public
static
person getinstance()
}
);輸出結果:var thread2 = new thread(() => );
var thread3 = new thread(() => );
thread1.start();
thread2.start();
thread3.start();
thread.sleep(
1000);//
等待子執行緒完成
console.writeline("
person1 == person2:
", object
.referenceequals(person1, person2));
}
輸出了多次,引用也不相等。說明多次例項化這個類,單例模式寫的不完全正確,那讓我們加上執行緒安全驗證。
繼續高階:
public客戶端呼叫**:class
person "
,gettype().name);
}//////
獲取類唯一的例項物件
/// public
static
person getinstance()}}
return
_person;}}
);輸出結果:var thread2 = new thread(() => );
var thread3 = new thread(() => );
thread1.start();
thread2.start();
thread3.start();
thread.sleep(
1000);//
等待子執行緒完成
console.writeline("
person1 == person2:
", object
.referenceequals(person1, person2));
}
輸出一次,引用相等,說明單例模式成功,執行緒安全已經加上。
高階2
可以使用靜態建構函式作為單例模式:
public客戶端**:class
person
",gettype().name);
}//////
靜態建構函式,只執行一次
/// static
person()
//////
獲取類的例項
/// public
static
person getinstance()
}
);輸出結果:var thread2 = new thread(() => );
var thread3 = new thread(() => );
thread1.start();
thread2.start();
thread3.start();
thread.sleep(
1000);//
等待子執行緒完成
console.writeline("
person1 == person2:
", object
.referenceequals(person1, person2));
}
輸出一次,引用相等,靜態建構函式也可以作為單例模式實現的一種方法。
C 設計模式之單例模式
在遊戲開發過程中,我們時常會遇到單例模式的運用場景。比如你遊戲當中的最終boss,你希望你的boss只能有乙個,所以這裡你就可以用單例模式 那麼什麼是單例模式呢?看下面的 分析。include include using namespace std class singleton public st...
C 設計模式之單例模式
設計模式是以理論的高度,總結了開發過程中的一多種不同的方法,在各種設計模式中,它們都有著不同實現方式,所起的作用也不相同,我最近看了部分設計模式,主要是以我自己的理解來闡述對它們的看法。我們可以看到單例的大概實現是很簡單的。幾個需要注意的地方是 只有當我們的建構函式為私有時,此時,我們在類外部就不能...
C 設計模式之 單例模式
單例模式,故名思義,其意圖是保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有的程式模組共享.在很多地方要用到這種設計模式,如系統的日誌輸出,作業系統的視窗,乙個pc連乙個鍵盤等.單例模式有許多實現方法.第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項,需要加鎖...