设计模式--模板方法
模板方法模式(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、模板方法中的非抽象方法,只有一份,没有代码冗余。