templete method 模版方法——类行为型模型
1.动机
在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但是各个子步骤却有很多改变的需求,或者由于固定的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。
2.定义
定义一个操作中的算法的估价,而将一些步骤延迟到子类中。TempleteMethod使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤。
3.用自己的一句话概括
在父类中实现功能框架,比如先进行步骤1,再进行步骤2。具体的步骤实现留在实现类中实现,以达到延时实现。比如盖房子,可以定义好先盖房子再装修,而怎么盖房子,怎么装修,由实现类来实现。
4.优点
- 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。
- 它在父类中提取了公共的部分代码,便于代码复用。
- 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。
5.缺点
- 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。
- 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。
6.使用场景
- 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
- 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
- 当需要控制子类的扩展时,模板方法只在特定点调用钩子操作,这样就只允许在这些点进行扩展。
7.总结
- 非常有用,非常基础性的设计模式。
- 机制非常简洁。它为很多应用程序框架提供了灵活的扩展点。是代码复用方面的基本实现结构。
- 内含一种反向控制结构。“不要调用我,让我来调用你”。
0 条评论