设计模式——模板方法模式(模板方法模式来写作文)

 本文首发于cdream的个人博客,点击获得更好的阅读体验!

欢迎转载,转载请注明出处。

本文简单讲述了模板方法模式,例子为如何使作文模板来写作文。如果想进一步,了解模板方法,建议读完后阅读一下spring中AbstractApplicationContext类的refresh方法或HttpServelt类中的service方法。

image-20181217201003375

一、概念

定义:模板方法模式(Template method pattern)是一种类的行为设计模式。该模式会在父类的一个操作中定义算法的结构,然后将具体实现推迟到子类中完成。可以让子类重新定义某些方法的实现而不改变原来的算法结构。

当然,父类可以实现该算法结构的某些方法,将剩余逻辑交给子类实现,不同的子类有不同的实现。

模板方法模式是最常被使用的设计模式之一,在Servlet里,记不记的我们要继承一个HttpServlet类,然后需要重写doPost()和doGet()方法。还有那个Spring的IoC容器的初始化方法中refresh()就是一个典型的模板方法,这里面obtainFreshBeanFactory()是抽象方法,postProcessBeanFactory()和onRefresh()是钩子方法。

二、结构

UML图:

image-20181217075208695

主要组成部分:

抽象模板类(Template):会定义一个模板方法,模板方法往往是一个具体方法,给出一个固定的方法调用顺序,其中的抽象方法会推迟到子类中实现。

  1. Template:模板方法,会定义一个逻辑骨架
  2. method01:具体方法,在抽象类中就给出了实现,如果不想让子类修改,可以给方法加上final
  3. method02:抽象方法,推迟到子类中实现,在不同的子类中可以有不同的实现
  4. hook:钩子方法,抽象类给出了默认实现,子类也可以根据需要对该方法进行重写

抽象类实现(SubClass):模板类中的抽象方法会在子类中实现,不同的子类中算法会有不同的实现,其中SubClass2选择了重写hook方法,而SubClass1选择了抽象类中默认实现。

三、谁又没背过几篇作文模板呢?

都是应试教育过来的人,想必大家都背过几个作文模板吧~哈哈,接下来,我们就用模板方法模式做一个简单的作文模板!

这是个作文模板,也就是模板方法模式里面的抽象类,start和end都是钩子方法,content是抽象方法,需要推迟到子类中实现

public abstract class CompositionTemplate {     public void template(){         start();         content();         end();     }      public void start(){         System.out.println("As far as I am concerned,");     }     public void end(){         System.out.println("In a word,");     }     public abstract void content(); }

一篇关于保护环境的文章

public class Composition1 extends CompositionTemplate {     @Override     public void content() {         System.out.println("李华认为保护环境很重要!");     } }

一篇关于经济的文章

public class Composition2 extends CompositionTemplate {     @Override     public void content() {         System.out.println("小白认为经济发展更重要!");     } }

搞起来~

public 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信