单件模式的两个简单实例

计数器功能


实际用途 : 网站访问量的统计:
代码 :
///

/// whs

/// 声明一个单件模式的对话类

/// 注意的事项

/// 1 构造函数必须是所有的。

/// 2 创建实例的函数必须是静态的的

/// 3 实例对象必须是静态的

///

class SingletonCount

{

//声明私有的构造函数

private SingletonCount()

{ }

 

private static SingletonCount mySingletonCount;

private static int count = 0;

 

public string setCount()

{

count = count +1;

return count.ToString();

}

 

public static SingletonCount GetInstance()

{

if (mySingletonCount == null)

{

mySingletonCount = new SingletonCount();

}

return mySingletonCount;

}

}

数据库连接

实际用途 : 程序连接数据库,如果每次操作数据库都要去连接数据库,是一笔很大的系统开销,那么我们可以让程序保持一个数据库连接。创建一个数据库单件模式的类 可以实现这个架构。

代码 :
///

/// 单件模式的数据库连接。

/// whs:

///

public class SingletonDataConnect

{

// 连接实例

private static OleDbConnection conn = null;

 

// 连接字符串

private string connString;

 

//类实例的锁

private static object classlock = typeof(SingletonDataConnect);

 

//类的实例『类的内部可以包含类的实例:只是声明一个变量,但是没有实例化,那么指针到底指向了谁。』

private static SingletonDataConnect dc;

 

//类是否实例化的标志。

private static bool instanceFlag = false;

 

//定义私有构造函数防止用户生成实例;用户不能生成实例,那么哪里进行实例初始化那。

private SingletonDataConnect()

{

 

connString = getConnString();

 

}

 

private string getConnString()

{

try

{

XmlDocument doc = new XmlDocument();

doc.Load(@"conn.xml"); //数据库连接设置的XML文件  

string returnval = doc.DocumentElement.InnerText.Trim();

doc = null;

return returnval;

}

catch (Exception err)

{

 

throw new Exception(err.Source + ":" + err.Message);

}

 

}

 

// 对类进行实例化。

public static SingletonDataConnect CreateConn()

{

//生成实例前加锁,保证只生成一个连接实例

lock (classlock)

{

// 如果生成过实例就不再生成新的实例。

if (!instanceFlag)

{

dc = new SingletonDataConnect();

instanceFlag = !instanceFlag;

}

}

return dc;

}

 

public OleDbConnection Open()

{

 

if (conn == null)

{

 

conn = new OleDbConnection(connString);

 

conn.Open();

 

}

 

return conn;

 

}

 

public void Close()

{

if (conn.State == System.Data.ConnectionState.Open)

{

conn.Close();

conn = null;

}

}

 

posted @ 2008-12-05 14:03  sdgxboy  阅读(323)  评论(0编辑  收藏  举报