一、什么是模板方法模式?
Template Method模式也叫模板方法模式,是行为模式之一,它把句有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。
二、模板方法模式的应用场景
Template Method模式一般应用在具有以下条件的应用中:
(1)、具有统一的操作步骤或操作过程
(2)、具有不同的操作细节
(3)、存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同
三、代码举例演示
(1)、创建抽象类MakeCar
package com.renxin.templatemethod;
/**
* 组装车
* @author Administrator
*
*/
public abstract class MakeCar {
//组装车头
public abstract void makeHead();
//组装车身
public abstract void makeBody();
//组装车尾
public abstract void makeTail();
}
(2)、创建MakeBus并且继承MakeCar
package com.renxin.templatemethod;
public class MakeBus extends MakeCar {
public void makeHead() {
System.out.println("bus:组装车头");
}
public void makeBody() {
System.out.println("bus:组装车身");
}
public void makeTail() {
System.out.println("bus:组装车尾");
}
}
(3)、创建测试类MainClass
package com.renxin.templatemethod;
public class MainClass {
public static void main(String[] args) {
MakeCar bus = new MakeBus();
bus.makeHead();
bus.makeBody();
bus.makeTail();
}
}
控制台输出结果为:
bus:组装车头
bus:组装车身
bus:组装车尾
(4)、创建MakeJeep并且继承MakeCar
package com.renxin.templatemethod;
public class MakeJeep extends MakeCar {
public void makeHead() {
System.out.println("Jeep:组装车头");
}
public void makeBody() {
System.out.println("Jeep:组装车身");
}
public void makeTail() {
System.out.println("Jeep:组装车尾");
}
}
(5)、修改测试MainClass
package com.renxin.templatemethod;
public class MainClass {
public static void main(String[] args) {
MakeCar bus = new MakeBus();
bus.makeHead();
bus.makeBody();
bus.makeTail();
System.out.println("==========");
MakeCar Jeep = new MakeJeep();
Jeep.makeHead();
Jeep.makeBody();
Jeep.makeTail();
}
}
控制台打印结果为
bus:组装车头
bus:组装车身
bus:组装车尾
==========
Jeep:组装车头
Jeep:组装车身
Jeep:组装车尾
四、模板方法模式的结构
代码演示模板方法:
(1)、修改抽象类MakeCar
package com.renxin.templatemethod;
/**
* 组装车
* @author Administrator
*
*/
public abstract class MakeCar {
//组装车头
public abstract void makeHead();
//组装车身
public abstract void makeBody();
//组装车尾
public abstract void makeTail();
//模板方法
public void make() {
this.makeHead();
this.makeBody();
this.makeTail();
}
}
(2)、修改测试类MainClass
package com.renxin.templatemethod;
public class MainClass {
public static void main(String[] args) {
MakeCar bus = new MakeBus();
/*bus.makeHead();
bus.makeBody();
bus.makeTail();*/
bus.make();
System.out.println("==========");
MakeCar Jeep = new MakeJeep();
/*Jeep.makeHead();
Jeep.makeBody();
Jeep.makeTail();*/
Jeep.make();
}
}
五、模板方法模式的角色和职责
(1)、AbstractClass:抽象类的父类
(2)、ConcreteClass:具体的实现子类
(3)、TemplateMethod():模板方法
(4)、method1()与method2():具体步骤方法