• 【设计模式学习笔记】模板模式


    模板模式

    • 解决的问题
      复用和扩展
      复用:将不变的逻辑放到父类的模板方法里,可变的逻辑放到子类中实现。然后统一调用父类的模板方法去执行。也就是说所有的子类可以复用父类中的模板方法。
      扩展(框架的扩展性):类似于控制反转。
      控制反转:抽象出一个类,类里面一部分是固定的逻辑,一部分是接口,留给子类实现。不管有多少子类基于这个类去实现,最后都是通过抽象类里的固定逻辑去运行。

    • 定义
      在一个方法中定义一个整体的框架,将框架中的某些步骤放到子类中实现。子类可以在不改变框架结构的情况下,重新定义某些步骤的实现。

    • 实现
      创建一个抽象类,在类里面定义一个模板方法(设为final,子类不可重写),方法里编写调用其他方法的逻辑。然后定义几个抽象方法,子类可以重写。
      创建N个子类,继承自抽象类,在子类里重写抽象类里的抽象方法。
      然后调用的时候,可以通过子类创建实例,调用父类的模板方法。

    • 问题
      如果在一个抽象类里,有两个以上的模板方法,并且有很多的抽象方法必须要子类实现。但是当仅用其中一个模板方法时,需要的抽象方法不多。如何解决每个子类继承自该抽象类必须重写所有抽象方法的问题?
      几个思路,不一定对:
      (1)创建一个适配器类继承自父类,实现所有抽象方法。然后子类继承自这个适配器类。重写自己所需的抽象方法。
      (2)拆成N个以上类。
      正确答案:
      使用回调函数,只需要往用到的模板方法中注入回调对象即可.


    • 回调函数
      A类注册一个函数F给B类,A类调用B类的P函数,B类反过来调用A之前注册给它的F函数。F函数就是回调函数。简而言之,回调就是A调用B,B反过来又调用A。

    • 实现
      Java的实现:在A类里调用B类的时候,先创建一个B类的对象,然后再调用B对象的方法。将回调函数作为一个对象从A类里传给B类的方法,在B类里的这个方法接收回调函数的对象,并且在方法里调用回调函数。

    • 同步回调
      在函数返回之前执行回调函数,类似于模板模式。

    • 异步回调(延迟回调)
      在函数返回之后执行回调函数,类似于观察者模式。

    • 回调和模板模式的异同
      (1)应用场景上,同步回调和模板模式几乎一致。异步回调和模板模式有较大差别,更像是观察者模式。
      (2)代码实现上,差别很大。回调使用组合,模板模式使用继承。

  • 相关阅读:
    [转] zigbee的低功耗
    手机显示电量原理
    TinyOS总结(一)
    KingPaper初探redist 之redis设置分析
    KingPaper初探redis之redis在window xp下的安装
    Web开发必知的八种隔离级别
    目前国内著名的维客(wiki)网站
    SSH Secure Shell Client
    Java线程:volatile关键字
    JDK1.6(JDK6.0) 新特性
  • 原文地址:https://www.cnblogs.com/liushengchieh/p/16323205.html
Copyright © 2020-2023  润新知