标签:style blog http color 使用 ar sp div 2014
1.所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。
2.类的构造方法写成private的,那么外部就不能通过new去实例化它了。
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
懒汉式单例类:要在第一次被引用时,才会将自己实例化,所以被称为懒汉式单例类。
1 /// <summary> 2 /// 单例模式 3 /// </summary> 4 public class Singleton 5 { 6 private static Singleton instance; 7 8 //私有的构造函数,防止外部使用new创建该类的实例 9 private Singleton(){} 10 11 //获得本类实例的唯一全局访问点 12 public static Singleton GetInstance() 13 { 14 if (instance==null) 15 { 16 instance = new Singleton(); 17 } 18 return instance; 19 } 20 }
多线程时的单例:
1 /// <summary> 2 /// 单例模式 3 /// </summary> 4 public class Singleton 5 { 6 private static Singleton instance; 7 8 //程序运行时创建一个静态只读的进程辅助对象 9 private static readonly object syncRoot = new object(); 10 11 //私有的构造函数,防止外部使用new创建该类的实例 12 private Singleton(){} 13 14 //获得本类实例的唯一全局访问点 15 /* lock:确保当一个线程位于代码的临界区时,另外一个线程不进入临界区。 16 如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止) 17 直到该对象被释放(MSDN) 18 */ 19 public static Singleton GetInstance() 20 { 21 //第一种加锁方式:每次调用GetInstance都需要lock,会影响性能. 22 //在同一时刻加了锁的那部分程序只有一个线程可以进入 23 lock (syncRoot) 24 { 25 if (instance == null) 26 { 27 instance = new Singleton(); 28 } 29 } 30 //第二种加锁方式(双重锁定)先判断实例是否创建,未创建再加锁处理同时也能保证多线程的安全。 31 if (instance==null) 32 { 33 lock (syncRoot) 34 { 35 if (instance==null) 36 { 37 instance = new Singleton(); 38 } 39 } 40 } 41 return instance; 42 } 43 }
饿汉单例类:这种静态初始化的方式是自己在加载时就将自己实例化,所以形象的被称为饿汉式单例类
1 /// <summary> 2 /// 饿汉单例模式(静态初始化) 3 /// sealed(密封类)阻止发生派生,而派生可能会增加实例 4 /// </summary> 5 public sealed class Singleton 6 { 7 //在第一次引用类的任何成员时创建实例,公共语言运行库负责处理变量初始化 8 private static readonly Singleton instance = new Singleton(); 9 10 private Singleton() { } 11 12 public static Singleton GetInstance() 13 { 14 return instance; 15 } 16 }
饿汉式单例类和懒汉式单例类的区别:
饿汉式(即静态初始化的方式):它是类一加载就实例化对象,所以要提前占用系统资源。
懒汉式:会面临多线程访问的安全性问题,需要做双重锁定处理才可以保证线程安全。
标签:style blog http color 使用 ar sp div 2014
原文地址:http://www.cnblogs.com/wgx0428/p/4022838.html