设计模式之模版方法

在前面大致讲了设计模式六大原则及三大模型(行为型、创建型、结构型)23种设模式;本文讲模版方法属于行为型模式;

 模版方法:简单讲是定了一个算法骨架,将可变的部分延迟到了子类,由子类来实现,封装不可变的,也是一种多态的实现;

   有这样的一个场景:需要对数据进行CURD操作,且能支持不同的数据库操作,我们可能会用EF进行封装或者其他orm框架,也可以自己实现,如果用到EF进行封装,基本上每种数据都会支持CURD简单操作;

但这只是针对简单操作,针对复杂批量语句操作可能效率不高,这样我们就会想到直接操作数据库,而不同的数据库操作sql语句不一样,这样我们就要封装一个抽象类,把共有的方法由抽象类实现,把个性化如批量插入的方法由子类来实现,这就利用了模版方法的设计思想;

限定一个抽象基类实现基本CURD操作

public abstract class Repository where T:class
{

  /// <summary>
  /// 新增
  /// </summary>
  /// <param name="entity"></param>
  public void Insert(T entity)
  {
          //......
  }
  /// <summary>
  /// 更新
  /// </summary>
  /// <param name="entity"></param>
  /// <returns></returns>
  public bool Update(T entity)
  {
        //......
      return true;
  }
  /// <summary>
  ///  删除
  /// </summary>
  /// <param name="entity"></param>
  /// <returns></returns>
  public bool Delete(T entity)
  {
      //......
      return true;
  }
  /// <summary>
  /// 查找
  /// </summary>
  /// <param name="id"></param>
  /// <returns></returns>
  public List<T> Query(int id)
  {
      //......
      return new List<T>();
  }

  /// <summary>
  /// 批量插入
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="entities"></param>
  public virtual void BulkInsert<T>(List<T> entities)
  {
      //由子类实现
  }

}

再定义SQLRepository、MySQLRepository来继承Repository并实现BulkInsert方法

复制代码
public class SQLRepository :Repository where T:class
{
public override void BulkInsert(List entities)
{
// 可以直接利用sql语句执行,(不同的数据库sql执行不一样)
}
}
复制代码
复制代码
public class MySQLRepository :Repository where T:class
{
public override void BulkInsert(List entities)
{
// 可以直接利用sql语句执行,(不同的数据库sql执行不一样)
}
}
复制代码
上端调用

以上只是模拟CRUD操作,如果真实场景可以看我这篇文章,针对EFCore封装
深圳网站建设 https://www.sz886.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值