小明的水果店越来越红火,小明想做一个微信公众号做推广并且发优惠券,当然这个公众号是小明这个店铺的唯一推广公众号
单例模式(Singleton Pattern):一个类只有一个实例,并且提供一个全局访问点来访问这个唯一的实例
单例模式的结构
实现单例模式需要达成两个条件:
1.该类不可实例化
2.提供一个私有的静态工厂方法
根据加载时间可以分为两种:
在运行时创建,也可以称之为饿汉式单例模式(Eager Singleton)
public class EagerSingleton
{
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() { }
public static EagerSingleton GetInstance()
{
return instance;
}
}
在使用时创建,也就是延迟加载,也可以称之为懒汉式单例模式(Lazy Singleton)
public class LazySingleton
{
private static LazySingleton instance = null;
//程序运行创建一个静态只读的辅助对象
private static readonly object syncRoot = new object();
private LazySingleton() { }
public static LazySingleton GetInstance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new LazySingleton();
}
}
}
return instance;
}
}
单例模式的优点:
1.单例模式提供唯一一个实例,严格控制用户的的访问入口
2.由于这个类只在内存中存在一个实例,可以节约系统资源
单例模式的缺点:
1.由于单例模式只有一个抽象层,单例类扩展困难
2.单例类的指责过重
3.C#的垃圾回收机制,当这个单例类很久不使用,系统就会把它当作垃圾处理回收
4.单例类的实例是存在内存中的,当一个系统种存在太多单例类,反而会占用大量的内存资源
单例模式的适用环境:
1.系统中只需要这个类的一个实例类,只能通过一个公共访问点,不能通过其他路径
2.创建这个类的实例太消耗资源