C# 设计模式(7)适配器模式
适配器模式
1. 类适配器 (通过继承)
2. 对象适配器 (通过组合)
组合优于继承
数据库适配,代码实现:
原始类 Sql server /MySql
namespace AdapterPattern
{
interface IHelper
{
void Add();
void Delete();
void Update();
void Query();
}
public class SqlHelper:IHelper
{
public void Add()
{
Console.WriteLine($"{this.GetType().Name} Add Data");
}
public void Delete()
{
Console.WriteLine($"{this.GetType().Name} Delete Data");
}
public void Update()
{
Console.WriteLine($"{this.GetType().Name} Update Data");
}
public void Query()
{
Console.WriteLine($"{this.GetType().Name} Query Data");
}
}
public class MySqlHelper:IHelper
{
public void Add()
{
Console.WriteLine($"{this.GetType().Name} Add Data");
}
public void Delete()
{
Console.WriteLine($"{this.GetType().Name} Delete Data");
}
public void Update()
{
Console.WriteLine($"{this.GetType().Name} Update Data");
}
public void Query()
{
Console.WriteLine($"{this.GetType().Name} Query Data");
}
}
}
适配Redis (原始Redis/Redis类适配/Redis对象适配)
public class RedisHelper
{
public void AddRedis()
{
Console.WriteLine($"{this.GetType().Name} Add Data");
}
public void DeleteRedis()
{
Console.WriteLine($"{this.GetType().Name} Delete Data");
}
public void UpdateRedis()
{
Console.WriteLine($"{this.GetType().Name} Update Data");
}
public void QueryRedis()
{
Console.WriteLine($"{this.GetType().Name} Query Data");
}
}
public class RedisHelperClass:RedisHelper,IHelper
{
public void Add()
{
base.AddRedis();
}
public void Delete()
{
base.DeleteRedis();
}
public void Update()
{
base.UpdateRedis();
}
public void Query()
{
base.QueryRedis();
}
}
public class RedisHelperObject:IHelper
{
private readonly RedisHelper _redisHelper;
public RedisHelperObject(RedisHelper redisHelper)
{
_redisHelper = redisHelper;
}
public void Add()
{
_redisHelper.AddRedis();
}
public void Delete()
{
_redisHelper.DeleteRedis();
}
public void Update()
{
_redisHelper.UpdateRedis();
}
public void Query()
{
_redisHelper.QueryRedis();
}
}
代码调用:
class Program
{
static void Main(string[] args)
{
SqlHelper sqlHelper = new SqlHelper();
sqlHelper.Add();
sqlHelper.Delete();
sqlHelper.Update();
sqlHelper.Query();
MySqlHelper mySqlHelper = new MySqlHelper();
mySqlHelper.Add();
mySqlHelper.Delete();
mySqlHelper.Update();
mySqlHelper.Query();
RedisHelperClass redisHelperClass = new RedisHelperClass();
redisHelperClass.Add();
redisHelperClass.Delete();
redisHelperClass.Update();
redisHelperClass.Query();
RedisHelperObject redisHelperObject = new RedisHelperObject(new RedisHelper());
redisHelperObject.Add();
redisHelperObject.Delete();
redisHelperObject.Update();
redisHelperObject.Query();
}
}