單利模式 確保一個類只有一個實例,並提供一個訪問它的全局訪問點 下麵用代碼來實現: /// <summary> /// 單利模式類 /// /// </summary> public class interest { /// <summary> /// 定義一個單利鎖 /// </summary> ...
單利模式
確保一個類只有一個實例,並提供一個訪問它的全局訪問點
下麵用代碼來實現:
/// <summary> /// 單利模式類 /// /// </summary> public class interest { /// <summary> /// 定義一個單利鎖 /// </summary> private static object _lock = new object(); /// <summary> /// 申明一個私有的全局訪問變數 /// </summary> private static interest ins = null; /// <summary> /// 定義私有構造函數 不能使用new實例化 /// </summary> private interest() { } /// <summary> /// 創建一個靜態方法 返回該類的實例 /// </summary> /// <returns></returns> public static interest GetIntance() { // 當第一個線程運行到這裡時,此時會對locker對象 "加鎖", // 當第二個線程運行該方法時,首先檢測到locker對象為"加鎖"狀態,該線程就會掛起等待第一個線程解鎖 lock (_lock) { if (ins == null) { ins = new interest(); } } /* 更好的實現方式 使用雙重鎖 * */ //if (ins == null) { // lock (_lock) // { // if (ins == null) { // ins = new interest(); // } // } //} return ins; } public string ShowMessage(string message) { return "hellow"+message; } }View Code
抽象工廠模式
在這之前我們搞一下抽象類的概念;
什麼是抽象類?由子類繼承必須必須實現其方法,不能實例化,在該類中沒有具體實現,用abstract來修飾;
定義一個抽象類:
1 public abstract class abstractFactory 2 { 3 4 /// <summary> 5 /// 定義吃飯基類方法 6 /// </summary> 7 /// <returns></returns> 8 public abstract eat kindeat(); 9 /// <summary> 10 /// 定義唱歌基類方法 11 /// </summary> 12 /// <returns></returns> 13 public abstract sing kindsing(); 14 15 }View Code
定義一個子類,繼承抽象類,實現其方法:
public class person : abstractFactory { public override eat kindeat() { return new personeat(); } public override sing kindsing() { return new personsing(); } }View Code
抽象工廠我自己的理解是在工廠類定義一些公共特性,比如吃飯,唱歌等,同時還要做到具體事物具體分析.比如人吃大米飯,那鳥就不是吃飯了,吃蟲子.而人和鳥公共特性是吃,只是吃的東西不一樣而已
所以這裡就可以運用抽象中來具體實現:
/// <summary> /// 抽象工廠方法基類 /// </summary> public abstract class abstractFactory { /// <summary> /// 定義吃飯基類方法 /// </summary> /// <returns></returns> public abstract eat kindeat(); /// <summary> /// 定義唱歌基類方法 /// </summary> /// <returns></returns> public abstract sing kindsing(); } /// <summary> /// 人類 /// </summary> public class person : abstractFactory { public override eat kindeat() { return new personeat(); } public override sing kindsing() { return new personsing(); } } /// <summary> /// 鳥類 /// </summary> public class brid : abstractFactory { public override eat kindeat() { return new brideat(); } public override sing kindsing() { return new bridsing(); } } /// <summary> /// 吃飯的類 /// </summary> public abstract class eat { public abstract void print(); } /// <summary> /// 唱歌類 /// </summary> public abstract class sing { public abstract void print(); } /// <summary> /// 人類吃飯類 /// </summary> public class personeat : eat { public override void print() { Console.WriteLine("我tm咋吃火鍋"); } } public class brideat : eat { public override void print() { Console.WriteLine("蟲子不好吃"); } } public class personsing : sing { public override void print() { Console.WriteLine( "我才唱英文歌"); } } public class bridsing : sing { public override void print() { Console.WriteLine("嘰嘰咋咋嘰嘰咋咋"); } }View Code
調用方法:
//定義一個任務 Task t1 = new Task(() => { //調用單利 Console.WriteLine(interest.GetIntance().ShowMessage("小紅")); Console.WriteLine(interest.GetIntance().ShowMessage("小名")); }); //開啟任務 t1.Start(); //等待線程執行完畢 Task.WaitAll(t1); //抽象工廠模式 abstractFactory person = new person(); eat e = person.kindeat(); e.print();View Code
以上就是我自己簡單的理解.大神勿噴!