单件模式[转]
单件模式(Singleton)是一个非常简单的模式,这是我第一个理解并且能运用的模式。有时候模式的复杂程度并不在于本身,而是由于他的应用目的。最初的时候面对一个模式经常充满了困惑,一个简单的调用为什么要搞的如此复杂?为什么要建立这么多类,只是为了打开一个文件。
单件模式
Singleton模式是一个较为简单的模式,下面的代码就可以建立一个Singlton模式的例子,这是一个写系统日志的类。
public class LogWriter
{
//申明一个静态的变量,类型为类本身
private static LogWriter _instance = null;
//将类的构造函数私有化,使得这个类不可以被外界创建
private LogWriter()
{
}
//提供静态的方法,创建类的实例
public static LogWriter GetInstance()
{
if (_instance == null)
{
_instance = new LogWriter();
}
return _instance;
}
//下面实现类的其他功能
//....
}
调用者不可以通过new的形式得到Singleton的实例,调用的例子如下:
LogWriter log = LogWriter.GetInstance();
log.Debug("hello world");
实际应用
很容易想象,单件模式适用于下面的情况:整个系统中某个对象是唯一的,或者是有固定数量的。比如数据库连接,配置文件,等等……
模式是一种程序员间的约定术语,语言可以成为思维的基础。有了这样的语言,一些复杂的概念就变得容易交流了。比如设计人员只要说到,某个类是一个单件模式,是一个Singleton,程序员听见以后就至少应该明白这个类的调用方式了,而不用再详细的说明。
单件模式
Singleton模式是一个较为简单的模式,下面的代码就可以建立一个Singlton模式的例子,这是一个写系统日志的类。
public class LogWriter
{
//申明一个静态的变量,类型为类本身
private static LogWriter _instance = null;
//将类的构造函数私有化,使得这个类不可以被外界创建
private LogWriter()
{
}
//提供静态的方法,创建类的实例
public static LogWriter GetInstance()
{
if (_instance == null)
{
_instance = new LogWriter();
}
return _instance;
}
//下面实现类的其他功能
//....
}
调用者不可以通过new的形式得到Singleton的实例,调用的例子如下:
LogWriter log = LogWriter.GetInstance();
log.Debug("hello world");
实际应用
很容易想象,单件模式适用于下面的情况:整个系统中某个对象是唯一的,或者是有固定数量的。比如数据库连接,配置文件,等等……
模式是一种程序员间的约定术语,语言可以成为思维的基础。有了这样的语言,一些复杂的概念就变得容易交流了。比如设计人员只要说到,某个类是一个单件模式,是一个Singleton,程序员听见以后就至少应该明白这个类的调用方式了,而不用再详细的说明。