CSharp: Singleton Pattern in donet 6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | /// <summary> ///单例模式 单件模式、Singleton Pattern /// </summary> public abstract class BaseGreeter { public virtual void Greet() => Console.WriteLine($ "Greetings from {GetType().Name}!" ); } /// <summary> /// 单例模式 单件模式、Singleton Pattern /// </summary> public class SimpleGreeter : BaseGreeter { /// <summary> /// /// </summary> private static SimpleGreeter? _instance; /// <summary> /// /// </summary> private SimpleGreeter() { Console.WriteLine( "简单的单例实例化了第一次也是唯一一次!!" ); } /// <summary> /// /// </summary> public static SimpleGreeter Instance { get { Console.WriteLine( "请求简单的单例..." ); if (_instance == null ) { _instance = new SimpleGreeter(); } Console.WriteLine( "返回简单单例" ); return _instance; } } } /// <summary> /// 单例模式 单件模式、Singleton Pattern /// </summary> public class SimpleThreadSafetyGreeter : BaseGreeter { /// <summary> /// /// </summary> private static readonly object Padlock = new (); /// <summary> /// /// </summary> private static SimpleThreadSafetyGreeter? _instance; /// <summary> /// /// </summary> private SimpleThreadSafetyGreeter() { } /// <summary> /// /// </summary> public static SimpleThreadSafetyGreeter Instance { get { lock (Padlock) { if (_instance == null ) { _instance = new SimpleThreadSafetyGreeter(); } return _instance; } } } } /// <summary> /// 单例模式 单件模式、Singleton Pattern /// </summary> public class DotNetLazyGreeter : BaseGreeter { /// <summary> /// /// </summary> private static readonly Lazy<DotNetLazyGreeter> Lazy = new (() => new DotNetLazyGreeter()); /// <summary> /// /// </summary> private DotNetLazyGreeter() { } /// <summary> /// /// </summary> public static DotNetLazyGreeter Instance => Lazy.Value; } /// <summary> /// 单例模式 单件模式、Singleton Pattern /// </summary> public class DoubleCheckGreeter : BaseGreeter { /// <summary> /// / /// </summary> private static readonly object Padlock = new (); /// <summary> /// /// </summary> private static DoubleCheckGreeter? _instance; /// <summary> /// /// </summary> private DoubleCheckGreeter() { } /// <summary> /// Gets instance in a way to support multi-threaded applications through 'double checked locking' /// pattern which (once the instance exists) avoids locking each time the method is invoked. /// </summary> [SuppressMessage( "Maintainability" , "CA1508:Avoid dead conditional code" , Justification = "If the first check determines that instance is null, that might not be the case for the second check in multi-threaded scenarios." )] public static DoubleCheckGreeter Instance { get { if (_instance == null ) { lock (Padlock) { if (_instance == null ) { _instance = new DoubleCheckGreeter(); } } } return _instance; } } } /// <summary> /// 单例模式 单件模式、Singleton Pattern /// </summary> public class LocklessFullyLazyGreeter : BaseGreeter { /// <summary> /// /// </summary> private LocklessFullyLazyGreeter() { } /// <summary> /// /// </summary> public static LocklessFullyLazyGreeter Instance => Nested.Instance; /// <summary> /// /// </summary> private class Nested { /// <summary> /// Although nested classes have access to the enclosing class's private members, /// the reverse is not true, hence the need for instance to be internal here. /// </summary> internal static readonly LocklessFullyLazyGreeter Instance = new (); // Explicit static constructor to tell C# compiler not to mark as BeforeFieldInit. // http://csharpindepth.com/Articles/General/Singleton.aspx static Nested() { } } } /// <summary> /// 单例模式 单件模式、Singleton Pattern /// </summary> public class LocklessGreeter : BaseGreeter { /// <summary> /// /// </summary> private static readonly LocklessGreeter InstanceValue = new (); // Explicit static constructor to tell C# compiler not to mark type as BeforeFieldInit. static LocklessGreeter() { } /// <summary> /// /// </summary> private LocklessGreeter() { } /// <summary> /// /// </summary> public static LocklessGreeter Instance => InstanceValue; } } |
调用:
1 2 3 4 5 6 | Geovin.Du.DuSingleton.Types.SimpleGreeter.Instance.Greet(); Geovin.Du.DuSingleton.Types.SimpleThreadSafetyGreeter.Instance.Greet(); Geovin.Du.DuSingleton.Types.DoubleCheckGreeter.Instance.Greet(); Geovin.Du.DuSingleton.Types.LocklessGreeter.Instance.Greet(); Geovin.Du.DuSingleton.Types.LocklessFullyLazyGreeter.Instance.Greet(); Geovin.Du.DuSingleton.Types.DotNetLazyGreeter.Instance.Greet(); |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 2 最初的问候... 请求简单的单例... 返回简单单例 Greetings from SimpleGreeter! Greetings from SimpleThreadSafetyGreeter! Greetings from DoubleCheckGreeter! Greetings from LocklessGreeter! Greetings from LocklessFullyLazyGreeter! Greetings from DotNetLazyGreeter! 再见的问候... 请求简单的单例... 返回简单单例 Greetings from SimpleGreeter! Greetings from SimpleThreadSafetyGreeter! Greetings from DoubleCheckGreeter! Greetings from LocklessGreeter! Greetings from LocklessFullyLazyGreeter! Greetings from DotNetLazyGreeter! |
萬事萬物並不是存在就有意義的。顯然,人、動物和物體以物的形式存在著,並且會有不同程度的改變,但是,賦予它們意義的並非單純的物質上的存在。要獲得確定的意義,就必須賦予人、動物和物體以象徵意味。只有把生命和無生命的棲居者都轉換為象徵性的實體,社會與文化才能理解這個世界—即使只是嘗試性的、暫時性的理解。人們使用的象徵符號多種多樣,其含義因社會和文化的差異而發生變化。此類象徵符號、囊括了塑造特定群體之價值體系和行為方式的詞語、視覺形象以及禮儀和習俗。人、動物和物體皆與象徵符號相關,正是在這一點上,一個群體經由教育而認識到自身的存在是意味深長或意義重大的。
同時,任何物質形式都不可能擁有一個最終或者永恆的意義。事實上,隨著它所屬的文化或社會形態的改變,其含義將不可避免地發生與變化。這種說法如果適用於具體的實體,並且會因此發生變化,這無疑已被用來意指抽象概念的詞語的變化所證實—諸如“文化”、“社會”、“價值”和“社群”等。此類觀念並沒有指向普遍性的範疇,毋寧說,它們把握住了特定語境中的意義,而意義取決於那些用來界定意義的象徵符號。
---《Critical and Cultural Theory》 by Dani Cavallaro
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!