IDisposable模式不是经典的GOF模式之一,主要是实现IDisposable接口,这在.Net Framework中很常见,当用using语句时,实现这个接口的类在释放资源时自动释放。例如我们在开发中经常用到事务控制,这时我们写一个事务控制类,让它继承IDisposable接口。
using System;
using System.Data;

public class TransactionControl : IDispoable
{
    
private bool _disposed = false;
    
private IDbConnection _conn;
    
private IDbTransaction _trans;

    
public TransactionControl()
    {
        
try
        {
            _conn 
= ConnFactory.Create(ConnManager.GetConnInfo());
            _conn.Open();
            _trans 
= _conn.BeginTransaction();
        }
        
catch
        {
            Dispose();
        }
    }

    
public TransactionControl(string name)
    {
        
try
        {
            _conn 
= ConnFactory.Create(ConnManager.GetConnInfoByName(name));
            _conn.Open();
            _trans 
= _conn.BeginTransaction();
        }
        
catch
        {
            Dispose();
        }
    }

    
public void Commit()
    {
        _trans.Commit();
    }

    
public void Rollback()
    {
        _trans.Rollback();
    }

    
public IDbConnection Connection
    {
        
get { return _conn; }
    }

    
public IDbTransaction Transaction
    {
        
get { return _trans; }
    }

    
~DisposeObject()
    {
        Dispose(
false);
    }

    
public void Dispose()
    {
        Dispose(
true);
    }

    
private void Dispose(bool disposing)
    {
        
if (!_disposed)
        {
            
if (disposing)
            {
                CleanUp();
                GC.SuppressFinalize(
this);
            }
            _disposed 
= true;
        }
    }

    
private void CleanUp()
    {
        
if (_trans != null)
        {
            _trans.Dispose();
        }
        
if (_conn != null)
        {
            
if (_conn.State != ConnectionState.Closed)
            {
                _conn.Close();
            }
            _conn.Dispose();
        }
    }
}
posted on 2008-11-08 08:39  8user  阅读(260)  评论(0编辑  收藏  举报