首页 > 代码库 > 设计模式之单例模式
设计模式之单例模式
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Singleton{ //饿汉模式:类加载的时候就会实例化一个对象并加载到内存,所以加载类时比较慢,但运行时获取对象的速度比较快,线程安全 public class Singleton { private Singleton() { } private static Singleton s = new Singleton(); public static Singleton getSingleton() { return s; //return new Singleton(); } } //懒汉模式:只在调用getSingleton方法的时候才会实例化对象,所以加载类时比较快,但运行时获取对象的速度比较慢,线程不安全 public class Singleton2 { private Singleton2() { } private static Singleton2 s; public static Singleton2 getSingleton() { if (s == null) { return new Singleton2(); } else { return s; } } } class Program { static void Main(string[] args) { //饿汉模式 Singleton s1 = Singleton.getSingleton(); Singleton s2 = Singleton.getSingleton(); if (s1 == s2) { Console.WriteLine("s1和s2是同一个实例"); } else { Console.WriteLine("s1和s2不是同一个实例"); } //懒汉模式 Singleton s3 = Singleton.getSingleton(); Singleton s4 = Singleton.getSingleton(); if (s3 == s4) { Console.WriteLine("s3和s4是同一个实例"); } else { Console.WriteLine("s3和s4不是同一个实例"); } Console.ReadKey(); } }}
注:懒汉式可以实现延迟加载,但是在多线程并发访问的情况下会出现安全问题,可以通过加同步来解决,只是加上同步效率会稍低,这时候可以再使用双重判断来解决这个低效的问题,加同步的时候使用的锁是该类所属的字节码文件对象。
设计模式之单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。