委派模式与模板模式(5)

简介: 委派模式与模板模式(5)

六、模板方法模式在源码中的体现


先来看 JDK 中的 Abstractlist , 来看代码:


public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
    abstract public E get(int index);
}



我们看到 get()一个抽象方法 , 那么它的逻辑就是交给子类来实现,我们大家所熟知的 Arraylist

就是 Abstractlist 的子类。同理,有 Abstractlist就有 Abstractset 和 AbstractMap , 有兴趣的小伙伴可以去看看这些的源码实现。还有一个每天都在用的 HttpServlet, 有三个方法 service()和 doGet()、

doPost()方法,都是模板方法的抽象实现。


在 MyBatis框架也有—些经典的应用 ,我们来一下 BaseExecutor 类,它是—个基础的 SQL 执行类,

实现了大部分的 SQL 执行逻辑 ,然后把几个方法交给子类定制化完成 , 源码如下:


public abstract class BaseExecutor implements Executor {
  protected abstract int doUpdate(MappedStatement ms, Object parameter)
      throws SQLException;
  protected abstract List<BatchResult> doFlushStatements(boolean isRollback)
      throws SQLException;
  protected abstract <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)
      throws SQLException;
  protected abstract <E> Cursor<E> doQueryCursor(MappedStatement ms, Object parameter, RowBounds rowBounds, BoundSql boundSql)
      throws SQLException;
}


如 doUpdate、 doFlushStatements、 doQuery、 doQueryCursor 这几个方法就是交由子类来实

现, 那么 BaseExecutor 有哪些子类呢?我们来看一下它的类图:


image.png


我们一起来看—下 SimpleExecutor 的 doUpdate 实现


public class SimpleExecutor extends BaseExecutor {
  @Override
  public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
    Statement stmt = null;
    try {
      Configuration configuration = ms.getConfiguration();
      StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, RowBounds.DEFAULT, null, null);
      stmt = prepareStatement(handler, ms.getStatementLog());
      return handler.update(stmt);
    } finally {
      closeStatement(stmt);
    }
  }
}


七、模板模式的优缺点

优点:


1、 利用模板方法将相同处理逻编的代码放到抽象父类中 , 可以提高代码的复用性。


2、 将不同的代码不同的子类中 , 通过对子类的扩展墙加新的行为 , 提高代码的扩展性。


3、 把不变的行为写在父类上 , 去除子类的重复代码 , 提供了一个很好的代码复用平台 , 符合开闭原则。


缺点:


1、 类数目的培加 , 每一个抽象类都需要一个子类来实现 , 这样导致类的个数谧加。


2、 类数呈的培加 , 间接地墙加了系统实现的复杂度。


3、 继承关系自身缺点 , 如果父类添加新的抽象方法 , 所有子类都要改—遍。


文章参考地址:

九、委派模式与模板模式详解


目录
相关文章
|
2月前
|
缓存 前端开发 Java
JVM知识体系学习二:ClassLoader 类加载器、类加载器层次、类过载过程之双亲委派机制、类加载范围、自定义类加载器、编译器、懒加载模式、打破双亲委派机制
这篇文章详细介绍了JVM中ClassLoader的工作原理,包括类加载器的层次结构、双亲委派机制、类加载过程、自定义类加载器的实现,以及如何打破双亲委派机制来实现热部署等功能。
76 3
|
3月前
|
设计模式 Java Spring
spring源码设计模式分析(七)-委派模式
spring源码设计模式分析(七)-委派模式
|
设计模式 Java 数据库连接
认真学习设计模式之委派模式(Delegate Pattern)
认真学习设计模式之委派模式(Delegate Pattern)
59 0
|
设计模式 前端开发 Java
你以为委派模式很神秘,其实你每天都在用
我们用代码来模拟老板给员工分配任务的业务场景。
90 0
|
算法 前端开发 Java
Delegate 委派模式和代理模式strategy的区别?策略模式如何实现消除多层if else?(上)
Delegate 委派模式和代理模式strategy的区别?策略模式如何实现消除多层if else?
253 0
Delegate 委派模式和代理模式strategy的区别?策略模式如何实现消除多层if else?(上)
|
算法 Java 调度
Delegate 委派模式和代理模式strategy的区别?策略模式如何实现消除多层if else?(下)
Delegate 委派模式和代理模式strategy的区别?策略模式如何实现消除多层if else?(下)
146 0
Delegate 委派模式和代理模式strategy的区别?策略模式如何实现消除多层if else?(下)
|
前端开发 Java
简述ClassLoader双亲委派模式
简述ClassLoader双亲委派模式
122 0
|
设计模式 Java Spring
Java设计模式 ->委派模式
Java设计模式 ->委派模式
105 0
|
Java
自定义类加载器并打破双亲委派机制
本文带大家来自定义一个类加载器。
215 0
自定义类加载器并打破双亲委派机制
|
前端开发 Oracle Java
理解双亲委派模式
理解双亲委派模式
133 0

热门文章

最新文章