設(shè)計(jì)模式之單態(tài)模式
author: 李艷慶
date: 2005年11月4日
單態(tài)模式Singleton, 目的是保在調(diào)用期間, 一個(gè)類只有一個(gè)實(shí)例存在.
最典型的例子為數(shù)據(jù)庫連接, 數(shù)據(jù)庫連接只需要一個(gè), 所以可以使用單態(tài)模式.
使用單態(tài)模式時(shí), 創(chuàng)建數(shù)據(jù)庫連接的方法, 只能為靜態(tài), 并且要保證方法的同步, 否則在多線程操作中, 有可能會(huì)創(chuàng)建多個(gè)實(shí)例.
示例代碼如下:
using System;
using System.Data.OleDb;
using System.Runtime.Remoting.Contexts;
[Synchronization()]
public class ConnectionClass
{
?private static OleDbConnection instance = null;
?private static string constring = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=singleton.mdb;Mode=Share Deny None;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
?public static OleDbConnection GetInstance()
?{
??if (instance == null)
??{
???Console.WriteLine("Create new connection");
???instance = new OleDbConnection(constring);
??}
??return instance;
?}
}
public class Client
{
?public static void Main()
?{
??OleDbConnection cn = ConnectionClass.GetInstance();
??cn.Open();
??cn = ConnectionClass.GetInstance();
??cn.Close();
?}
}