设计模式之模板方法
2017-11-24 17:12
344 查看
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤。
通过调用抽象类,实现对子类的调用。其UML图如下:
抽象类(AbstractClass):也是一个抽象模板,定义了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,以完成完整的算法。
走过最长的路就是你的套路
话说孙悟空在三打白骨精,杀了众多强盗,被师傅念了紧箍咒之后,也学会了一定的“套路”,在之后降妖路上,大都是这样的:师傅被妖怪捉走,第一步是叫出土地山神,打探妖精来历;第二步才去降妖除魔,有时找这妖怪的主子来降服,有时得知妖怪弱点,好下手擒之;这里的擒妖套路,就是一个模板,每次收复不同的妖怪就是一次具体的实现。其UML图如下:
代码如下:
AbstractClass–捉妖套路(CatchMonster)类
具体类(ConcreteClass)–实现具体的捉妖方法
故事上演:
运行结果(代码亲测,可以通过):
代码地址:Template
综上,在实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分容易变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
欢迎大家评论留言,点击查看更多设计模式。
一、模板方法模式
在软件开发中,某个方法实现需要多步操作,我们就将每一步的操作称之为基本方法,所有的步骤综合起来完成,称之为模板方法。在模板方法中,有一些步骤是固定不变的,有一些步骤是要变化的。我们就可以将其中固定的部分交由父类实现,不固定的部分交由子类实现。通过调用抽象类,实现对子类的调用。其UML图如下:
抽象类(AbstractClass):也是一个抽象模板,定义了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,以完成完整的算法。
二、 案例分析
我们接茬《西游记》,聊聊模板方式模式。走过最长的路就是你的套路
话说孙悟空在三打白骨精,杀了众多强盗,被师傅念了紧箍咒之后,也学会了一定的“套路”,在之后降妖路上,大都是这样的:师傅被妖怪捉走,第一步是叫出土地山神,打探妖精来历;第二步才去降妖除魔,有时找这妖怪的主子来降服,有时得知妖怪弱点,好下手擒之;这里的擒妖套路,就是一个模板,每次收复不同的妖怪就是一次具体的实现。其UML图如下:
代码如下:
AbstractClass–捉妖套路(CatchMonster)类
abstract class CatchMonster{ //固定方法 public void callTuDi(){ System.out.println("召唤土地,看看这妖精是啥来头"); } //子类需要实现的方法 public abstract void arrestMonster(); //模板方法,定义捉妖套路 public void catchMonster(){ callTuDi(); arrestMonster(); } }
具体类(ConcreteClass)–实现具体的捉妖方法
class ConcreteCatchMonsterA extends CatchMonster{ public void arrestMonster(){ System.out.println("这个妖精是太上老君的青牛,我找他去!让他来降服这厮。"); } } class ConcreteCatchMonsterB extends CatchMonster{ public void arrestMonster(){ System.out.println("土地说这个妖精没有后台,直接打他。"); } }
故事上演:
public class Story{ public static void main(String[] args) { CatchMonster c; System.out.println("话说唐三藏被兕大王掠去,于是悟空"); c = new ConcreteCatchMonsterA (); c.catchMonster(); System.out.println("话说唐三藏又被祭赛国九头驸马捉去,于是悟空:"); c = new ConcreteCatchMonsterB (); c.catchMonster(); } }
运行结果(代码亲测,可以通过):
代码地址:Template
综上,在实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分容易变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
欢迎大家评论留言,点击查看更多设计模式。
相关文章推荐
- 设计模式(4)——模板方法模式(Template Method Pattern)
- 设计模式介绍:模板方法(Template Method)模式
- 【设计模式与Android】模板方法模式——照葫芦画瓢
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式之模板方法模式
- 极速理解设计模式系列:20.模板方法模式(Template Method Pattern)
- C++编程思想(卷二):设计模式:模板方法模式
- 模板方法模式----设计模式系列
- 【设计模式】 之 原型 VS 模板方法
- 【设计模式】《Head First 设计模式》读书笔记——模板方法模式
- java设计模式(八)--模板方法模式
- 模板方法设计模式
- Android设计模式--模板方法模式
- java设计模式-模板方法模式
- 设计模式之模板方法
- Java设计模式之模板方法模式
- java(2) 设计模式-模板方法设计模式
- 设计模式之模板方法模式
- 09:设计模式——模板方法设计模式