首页 > 其他 > 详细

模板方法模式

时间:2014-03-09 13:56:06      阅读:439      评论:0      收藏:0      [点我收藏+]

  模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

  这个模式是用来创建一个算法的模板。模板就是一个方法,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以保持算法的结构保持不变,同时由子类提供部分实现。

  这个模式还可以使用一种叫做“钩子”的方法。何谓“钩子”,或,它的作用是什么?

  钩子可以让子类实现算法中的可选部分,让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应,或决定是否做某些步骤。

  模板方法中有一些抽象方法,也可能有一些钩子,对于使用何者,如何确定?

  当子类必须提供算法中的某个方法或步骤的实现时,就使用抽象方法;如果这个方法是可选的,就使用钩子。

代码示例:

public abstract class A

{

  final void templateMethod()     // final 关键字表示子类无法覆盖,该方法即模板方法                

  {                 // 下面即步骤(结构)   

    Method1();                     // 子类必须覆盖     

    Method2();                     // 子类必须覆盖

    if(hook1())                      // 钩子,子类选择性覆盖,联系上面所述

    {

      Method3();               // 子类无法覆盖   

    }

    hook2();                        // 钩子,子类选择性覆盖,联系上面所述

  }

  abstract void Method1()

  {

    // 定义成抽象方法,由子类实现

  }

  abstract void Method2() {}

  final void Method3()

  {

    // do something

    // 子类直接继承使用即可

  }

  Boolean hook1()

  {

    // 这个方法可以默认不做事,也可以做一些简单的事,

    // 我们称之为“钩子”,子类可以视情况决定要不要覆盖他们,

    // 该钩子一般用来决定是否做某些步骤

  }

  void hook2()

  {

    // 这个方法可以默认不做事,也可以做一些简单的事,

    // 我们称之为“钩子”,子类可以视情况决定要不要覆盖他们

    // 该钩子一般用来做一些事情

  }

}

模板方法模式,布布扣,bubuko.com

模板方法模式

原文:http://www.cnblogs.com/hachun/p/3586180.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!