模板模式,适配器模式详解

目标

  1. 学会用模式模式梳理使用工作中流程标准化的业务场景
  2. 通过学习适配模式,优雅地解决代码功能的兼容问题
  3. 了解 JDK源码和Spring源码中对模板模式的运用。

内容定位:

  1. 不太适合接触业务场景比较单一的学员
  2. 深刻了解模板模式和适配器模式的应用场景

模板模式通常有叫模板方法模式(Template Method Pattern) 是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现

模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤.

属于行为性设计模式

模板模式的适用场景

  1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
  2. 各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复

在不改变流程的情况下,定制一些个性化的东西,使其结果不一样。

   public abstract class NetworkCourse {
        protected final void createCourse(){
          // 1.发布预习资料
          this.postPreResource();
          // 2. 制作PPT
          this.createPPT();
          // 3. 在线直播
          this.liveVideo();
          // 4.提交课堂笔记,课件
          this.postNote();
          // 5. 提交源码
          this.postSource();
          // 6. 布置作业,有些课是没有作业的,有些课有作业的
          // 如果有作业,检查作业; 如果没作业,完成了
          if(needHomwWork()) {
               
             checkHomeWork();
          }
        }
        protected abstract void checkHomeWork();
        // 钩子方法:实现流程微调
        protected  boolean needHomeWork(){return false};
        final void postSource() {
       		System.out.println("提交源码");
        }
        final void postNote() {
       		System.out.println("提交课件和笔记");
        }
        final void liveVideo() {
       		System.out.println("在线直播");
        }
	    final void postPreResource() {
       		System.out.println("分发预习资料");
        }
        final void createPPT() {
       		System.out.println("创建备课PPT");
        }
   }
   public class JavaCourse extends NetworkCourse {
      void checkHomework() {
        System.out.println("检查java作业"); 
      }
      @Override
      protected  boolean needHomeWork(){return true}
   }
  // orm 映射定制化接口	 
  public interface RowMapper {
    T mapRow(ResultSet rs, int rowNum) throws Exception;
  }
 abstract class JdbcTemplate {
   private DataSource dataSource;
   public JdbcTemplate(DataSource dataSource) {
       this.dataSource = dataSource;
   }
  public List<>> executeQuery(String sql ,RowMapper<?> rowMapper,Object[] values) {
      try{
       	// 1. 获取连接
    	 Connection conn = this.getConnection();
     	// 2. 创建语句集
     	PreparedStatement pstm = this.createPrepareStatement(conn,sql);
     	// 3. 执行语句集
     	Resultset rs = this.execute();
     	// 4. 处理结果集
        List<?> result =	this.parseResultSet(rs,rowMapper,values);
     	// 5.关闭结果集
     	// 6. 关闭语句集
     	// 7. 关闭连接
     	this.closeConnection(conn);
     	return result;
      }catch(Exception e) {
        e.printStackTrace();
       }
     
   }
   public void closeConnection(Connection conn) throws Exception{
      conn.close();
   }
   public PrepareStatement createPrepareStatement(Connection conn,String sql) {
     return conn.prepareStatement(sql);
   }
  public Connection getConnection() throws SqlException {
  		return this.dataSource.getConnection();
  } 
 }
 
   MemberDAO extends JdbcTemplate {
       
   }

JDK源码中关于模板模式的使用 AbstractList.get();
HttpServlet
mybatis:
Executor
BaseExecutor
ReuseExecutor SimpleExecutor BatchExecutor

模板模式的优点:

  1. 提高代码的复用性
  2. 提高代码的扩展性
  3. 符合开闭原则
    缺点:
  4. 类数目的增加
  5. 间接的增加了系统实现的复杂度
  6. 继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍

欢迎加入技术交流群:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值