200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C# 设计模式之单例模式(懒汉模式 饿汉模式 静态内部类模式)

C# 设计模式之单例模式(懒汉模式 饿汉模式 静态内部类模式)

时间:2021-03-01 09:21:27

相关推荐

C# 设计模式之单例模式(懒汉模式 饿汉模式 静态内部类模式)

C# 设计模式之单例模式(懒汉模式、饿汉模式、静态内部类模式)

应用场景:在整个软件运行生命周期内,一个类只允许一次实例化,例如数据库连接池的连接对象创建;通过使用单例模式来避免反复创建连接对象,从而降低非必要性能浪费

1.Main 方法代码

class Program{static void Main(string[] args){单例模式之懒汉模式-延迟加载方案LazySingleton instance = LazySingleton.getInstance();LazySingleton instance1 = LazySingleton.getInstance();Console.WriteLine(instance == instance1);单例模式之饿汉模式HungrySingleton instance2 = HungrySingleton.getInstance();HungrySingleton instance3 = HungrySingleton.getInstance();Console.WriteLine(instance2 == instance3);//单例模式之静态内部类模式InnerClassSignleton instance4 = InnerClassSignleton.getInstance();InnerClassSignleton instance5 = InnerClassSignleton.getInstance();Console.WriteLine(instance4 == instance5);Console.ReadKey();}}

2.各模式类

// 懒汉模式类class LazySingleton{private static readonly object locker = new object();private volatile static LazySingleton instance;//volatile 关键字,防止字节码执行阶段CLR或者CPU重排序执行private LazySingleton(){}public static LazySingleton getInstance(){if (instance == null){lock (locker){if (instance == null){instance = new LazySingleton();}}}return instance;}}//饿汉模式类class HungrySingleton{private static HungrySingleton instance = new HungrySingleton();private HungrySingleton() {}public static HungrySingleton getInstance(){return instance;}}//静态内部类class InnerClassSignleton{private static class InnerClassHolder{public static InnerClassSignleton instance = new InnerClassSignleton();}private InnerClassSignleton() {if (InnerClassHolder.instance != null) {throw new Exception("单例模式不允许多个实例");}}public static InnerClassSignleton getInstance(){return InnerClassHolder.instance;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。