13模板模式

定义算法的骨架,让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

解决问题:复用、扩展

  • 复用:
    Java InputStream
    Java AbstractList
  • 扩展:
    Java Servlet
    JUnit TestCase

模板模式经典实现,模板方法定义为final,避免子类重写。需重写的方法定义为abstract,强迫子类实现。

回调

与模板模式相同都是定义算法骨架,替换其中的某个步骤,起到代码复用和扩展的目的
同步回调,更像模板模式
异步回调,更像观察者模式
模板基于继承,回调基于组合更灵活

应用

  • xxxTemplate
    JdbcTemplate、RedisTemplate、RestTemplate
    JdbcTemplate#excute定义固定流程,可变的部分设计成回调StatementCallback
    JdbcTemplate#query()是对execute()的二次封装
  • 控件
    客户端应用中点击事件回调
  • Hook
    Hook, Tomcat和JVM的shutdown hook
    JVM的Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的Hook。当应用程序关闭的时候,JVM会自动调用Hook代码