C# 設計模式(7)介面卡模式
阿新 • • 發佈:2020-12-01
介面卡模式
1. 類介面卡 (通過繼承)
2. 物件介面卡 (通過組合)
組合優於繼承
資料庫適配,程式碼實現:
原始類 Sql server /MySql
namespace AdapterPattern { interface IHelper { void Add<T>(); void Delete<T>(); void Update<T>(); void Query<T>(); } public class SqlHelper:IHelper { public void Add<T>() { Console.WriteLine($"{this.GetType().Name} Add Data"); } public void Delete<T>() { Console.WriteLine($"{this.GetType().Name} Delete Data"); } public void Update<T>() { Console.WriteLine($"{this.GetType().Name} Update Data"); } public void Query<T>() { Console.WriteLine($"{this.GetType().Name} Query Data"); } } public class MySqlHelper:IHelper { public void Add<T>() { Console.WriteLine($"{this.GetType().Name} Add Data"); } public void Delete<T>() { Console.WriteLine($"{this.GetType().Name} Delete Data"); } public void Update<T>() { Console.WriteLine($"{this.GetType().Name} Update Data"); } public void Query<T>() { Console.WriteLine($"{this.GetType().Name} Query Data"); } } }
適配Redis (原始Redis/Redis類適配/Redis物件適配)
public class RedisHelper { public void AddRedis<T>() { Console.WriteLine($"{this.GetType().Name} Add Data"); } public void DeleteRedis<T>() { Console.WriteLine($"{this.GetType().Name} Delete Data"); } public void UpdateRedis<T>() { Console.WriteLine($"{this.GetType().Name} Update Data"); } public void QueryRedis<T>() { Console.WriteLine($"{this.GetType().Name} Query Data"); } } public class RedisHelperClass:RedisHelper,IHelper { public void Add<T>() { base.AddRedis<T>(); } public void Delete<T>() { base.DeleteRedis<T>(); } public void Update<T>() { base.UpdateRedis<T>(); } public void Query<T>() { base.QueryRedis<T>(); } } public class RedisHelperObject:IHelper { private readonly RedisHelper _redisHelper; public RedisHelperObject(RedisHelper redisHelper) { _redisHelper = redisHelper; } public void Add<T>() { _redisHelper.AddRedis<T>(); } public void Delete<T>() { _redisHelper.DeleteRedis<T>(); } public void Update<T>() { _redisHelper.UpdateRedis<T>(); } public void Query<T>() { _redisHelper.QueryRedis<T>(); } }
程式碼呼叫:
class Program { static void Main(string[] args) { SqlHelper sqlHelper = new SqlHelper(); sqlHelper.Add<Program>(); sqlHelper.Delete<Program>(); sqlHelper.Update<Program>(); sqlHelper.Query<Program>(); MySqlHelper mySqlHelper = new MySqlHelper(); mySqlHelper.Add<Program>(); mySqlHelper.Delete<Program>(); mySqlHelper.Update<Program>(); mySqlHelper.Query<Program>(); RedisHelperClass redisHelperClass = new RedisHelperClass(); redisHelperClass.Add<Program>(); redisHelperClass.Delete<Program>(); redisHelperClass.Update<Program>(); redisHelperClass.Query<Program>(); RedisHelperObject redisHelperObject = new RedisHelperObject(new RedisHelper()); redisHelperObject.Add<Program>(); redisHelperObject.Delete<Program>(); redisHelperObject.Update<Program>(); redisHelperObject.Query<Program>(); } }