定义
模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
通俗理解
当我们在写ppt的时候,我们第一个想到的就是上网找一个模板,然后用这个模板,把ppt弄得漂亮一些。这里的模板就是我们今天要讲到的模板模式,它是一种用继承来复用代码的方式,将通用的方法放到父类当中,然后彼此不同的方法方到子类上面。就像写ppt一样,每一个人写ppt的内容都是不一样的,但是外观,一些边框字体都是一样的,这样我们就可以采用下载网上的ppt模板,套上自己的内容去做ppt,这样就可以很快很高效地完成ppt的书写了。因此这里的ppt模板就像父类,而自己的内容就像子类,子类能用父类的设计,就实现了复用。
示例
用模板写ppt。
渣渣程序
PPT类
public class PPT1 {
public void outlook() {
System.out.println("选择模板");
}
public void writePPT() {
System.out.println("写PPT1");
}
}
// PPT2类似,省略
程序入口
public class Main {
static PPT1 ppt1 = new PPT1();
static PPT2 ppt2 = new PPT2();
public static void main(String[] args) {
ppt1.outlook();
ppt1.writePPT();
ppt2.outlook();
ppt2.writePPT();
}
}
//选择模板
//写PPT1
//选择模板
//写PPT2
问题就是,outlook
方法,我们写了两遍,复制,黏贴代码都是罪过,千万不要当CV程序员,解决办法就是把他们提到父类里面。
优化
类图
程序
PPT抽象类和实现
public abstract class PPT {
public void outlook() {
System.out.println("选择模板");
}
public abstract void writePPT();
}
public class PPT1 extends PPT{
public void writePPT() {
System.out.println("写PPT1");
}
}
// PPT2类似,省略
程序入口
public class Main {
static PPT ppt1 = new PPT1();
static PPT ppt2 = new PPT2();
public static void main(String[] args) {
ppt1.outlook();
ppt1.writePPT();
ppt2.outlook();
ppt2.writePPT();
}
}
//选择模板
//写PPT1
//选择模板
//写PPT2
除了在抽象类当中定义具体的方法和抽象的方法外,还可以定义空方法和钩子方法。
- 空方法:在方法体上不做任何的操作;
- 钩子方法:返回为boolean的方法,用来确定是否运行某个代码片段,子类中确定是否运行父类的某些片段。
优点
- 代码复用,将子类中复用的代码都放到父类当中去;
- 扩展性强。
缺点
- 具体方法类比较多;
- 要知道哪些是共用的哪些不是,不然这种复用会变得很糟糕。
应用场景
- 几个类中的代码片段反复出现的,(一个类中反复出现的可以提到一个方法中);
- 子类有统一的操作步骤与过程;
- 子类有具体的操作细节;
代码
吐槽
几个类中的代码片段反复出现的,提到父类当中。