最近工作中使用到了单例模式,对单例模式有了一些新的理解,将其记录下来。
什么是单例模式及其作用?
单例模式为一种简单的设计模式,是为了控制某个类型的实例唯一性,你需要多次用到,但是又不希望多次去new他。
例如一些公共类,需要常常使用又不需要扩展更改的类都可以使用单例模式,这样能够保证访问的实例都是同一个,节约资源,避免对共享资源的多重占用。
下面代码为单例模式的实现,加锁的目的是因为可能导致线程不安全,从而破坏单例模式。
// An highlighted block
public static class Singleton
{
private static Singleton instance = null;
private static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
//如果不加锁,可能两个线程进来instance 都为空,那么就会导致创建两个实例
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
};
使用时即可Singleton.Instance即可
作用
单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。
单例模式的应用场景。
以最近使用到的为例,最近有一个需求,我作为客户端需要定时给服务端发数据,因此我的TCP是每一次需要发的时候去连,发送完成之后再关掉。这时有个新的需求,服务端需要通过这个连接给我发请求,让我给他返回其他数据。这时就可以把连接写成一个单例,由于TCP本来就是长连接,故只需要在单例中进行连接,连上后不去close他,那就可以了。