一、为何需要单件模式
-
需求
我们开发了一个大型的项目,其中存在许多的工具类。但是其中很多的工具类我们并不是经常使用得到,甚至
一次都不会使用。但是这些工具类都是静态的类,会消耗很多的内存,即使一次都不使用。这个时候我们需要一种
方式可以解决这个问题。意指只有我们使用到这个工具类的时候才实例化,并且在以后的使用中总是返回首次实例
化的对象而不是重复的实例化新的对象。
-
方案
我们采取的方案是将类默认的构造方法设置为保护类型,这样使用者就无法直接实例化这个类,然后我们在公开一
个静态的方法,用于将本身返回给使用者。其中涉及判断当前的类是否已经被实例化的逻辑代码,如果当前的类已
经被实例化,则直接返回自身。否则实例化自身并保存进一个私有的静态变量中,以便以后使用的时候返回对象。
-
设计
下面是该类的大概轮廓:
View Code1 public class SingletonPattern 2 { 3 private static SingletonPattern _self; 4 5 protected SingletonPattern() 6 { 7 } 8 9 public static SingletonPattern GetInstance() 10 { 11 if (_self == null) 12 { 13 _self = new SingletonPattern(); 14 } 15 return _self; 16 } 17 }