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代码