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