1. 程式人生 > 其它 >關於CPU個數、核數、執行緒數的理解

關於CPU個數、核數、執行緒數的理解

假如現在一個已經上線了的專案,現在為了提高效能需要增加Redis。
Redis的資料操作,第三方已經給提供了,但是他提供的資料操作介面和現在的介面不同,呼叫端又希望按照之前定義的介面來呼叫。
介面卡模式就是解決這類問題的。
程式碼演示:

    /// <summary>
    /// 資料操作介面
    /// </summary>
    public interface ISqlHelper
    {
        void Add<T>();
        void Delete<T>();
        void Update<T>();
        void Query<T>();
    }

    /// <summary>
    /// SqlServer 資料庫操作類
    /// </summary>
    public class SqlServerHelper : ISqlHelper
    {
        public void Add<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Add.");
        }

        public void Delete<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Delete.");
        }

        public void Query<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Query.");
        }

        public void Update<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Update.");
        }
    }

    /// <summary>
    /// Redis 資料庫操作類
    /// 假設是第三方提供的,而且不能修改
    /// </summary>
    public class RedisHelper
    {
        public void AddRedis<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Add!");
        }
        public void DeleteRedis<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Delete!");
        }
        public void UpdateRedis<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Update!");
        }
        public void QueryRedis<T>()
        {
            Console.WriteLine($"This is {this.GetType().Name} Query!");
        }
    }

    
    /// <summary>
    /// 介面卡: 通過繼承的方式實現適配(滿足ISqlHelper介面,另外繼承RedisHelper)
    /// </summary>
    public class RedisHelperInherit : RedisHelper, ISqlHelper
    {
        public void Add<T>()
        {
            base.AddRedis<T>();
        }

        public void Delete<T>()
        {
            base.DeleteRedis<T>();
        }

        public void Query<T>()
        {
            base.QueryRedis<T>();
        }

        public void Update<T>()
        {
            base.UpdateRedis<T>();
        }
    }

    
       /// <summary>
        /// 呼叫
        /// </summary>
        static void Main(string[] args)
        {
            ISqlHelper sqlHelper = new SqlServerHelper();
            sqlHelper.Add<Student>();

            Console.WriteLine("**************************************");

            ISqlHelper redisHelper = new RedisHelperInherit();
            redisHelper.Add<Student>();

            Console.ReadKey();
        }

上面的示例是採用繼承的方式來實現的,下面的程式碼將採用組合的方式來實現,程式碼如下:

    /// <summary>
    /// 介面卡:通過組合的方式來實現
    /// </summary>
    public class RedisHelperCombination : ISqlHelper
    {
        /// <summary>
        /// 欄位屬性方式組合(方式一)
        /// 預設構造,特別強硬的
        /// </summary>
        private RedisHelper redisHelper = new RedisHelper();

        private RedisHelper _RedisHelper = null;
        /// <summary>
        /// 建構函式方式組合(方式二)
        /// 例項化時傳入,相對欄位屬性靈活一點
        /// </summary>
        public RedisHelperCombination(RedisHelper redisHelper)
        {
            this._RedisHelper = redisHelper;
        }
        /// <summary>
        /// 方法方式組合
        /// 物件 可有可無,因為方法可呼叫可不呼叫
        /// </summary>
        public void AddRedisHelper(RedisHelper redisHelper)
        {
            this._RedisHelper = redisHelper;
        }

        void ISqlHelper.Add<T>()
        {
            this.redisHelper.AddRedis<T>();
        }
        void ISqlHelper.Delete<T>()
        {
            this.redisHelper.DeleteRedis<T>();
        }
        void ISqlHelper.Query<T>()
        {
            this.redisHelper.QueryRedis<T>();
        }
        void ISqlHelper.Update<T>()
        {
            this.redisHelper.UpdateRedis<T>();
        }
    }