设计模式--模板方法

模板方法模式(Template Method)

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

应用举例:

  在系统的导出模块中,两个导出功能的唯一不同点:数据不相同。因此可以使用模板方法模式来设计导出模块。

设计与实现:

  1、一个抽象父类,导出方法中定义算法骨架。将获取数据的方法,定义为抽象方法。(定义模板)

  2、各个具体导出类,继承该抽象父类,并实现获取数据的抽象方法。(将一些步骤延迟到子类中实现)

伪代码:

  1、抽象父类:exportBase

  public abstract class exportBase{

    //导出方法模板

    public void export(){

      //下面定义导出的具体步骤,获取到数据后,将数据打包,压缩。

      List<Object> lists = queryDatas();  //获取数据的方法

      //压缩打包

      zipData(lists);

    }

    public abstract List<Object> queryDatas();//将获取数据的方法,定义为抽象类,由各个子类负责实现,获取不同的数据。

  }

  2、具体的导出类A:exportA

  public class exportA extends exportBase{

    public List<Object> queryDatas(){

      //实现具体的获取数据方式

    }

  }

  3、具体的导出类B:exportB  

  public class exportA extends exportBase{

    public List<Object> queryDatas(){

      //实现具体的获取数据方式

    }

  }

  4、调用导出方法

  调用父类定义的导出方法:export()就可以按照我们定义好的模板执行,根据不同子类的queryDatas()方法,获取不同的导出数据。

 

优点:

  1、模板的方式,规定了你必须这样做。相比于组合模式,模板方法强调“模板”,模式固定,不能修改。

  2、模板方法中的非抽象方法,只有一份,没有代码冗余。

 

posted @ 2018-10-15 10:00  陈标  阅读(145)  评论(0编辑  收藏  举报