zoukankan      html  css  js  c++  java
  • IDisposable模式

    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();
            }
        }
    }
    
  • 相关阅读:
    理解volatile与synchronized
    实现任意两个数的互换
    增删改查+部分前段内容
    Hibernate知识点小结汇总
    Spring知识点小结(一)
    JDBC相关
    Redis工具之Jedis
    Hibernate知识点小结(四)--JPA
    Hibernate知识点小结(三)-->一对多与多对多配置
    Hibernate知识点小结(二)
  • 原文地址:https://www.cnblogs.com/known/p/1326285.html
Copyright © 2011-2022 走看看