模板方法模式:
定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。
下面来个例子展示下本公司的上班情况(纯属娱乐,如有雷同,请对号入座)。简单描述一下:本公司有程序猿、测试、HR、项目经理等人,下面使用模版方法模式,记录下所有人员的上班情况:
package 模板方法模式;
public abstract class Worker {
protected String name;
public Worker(String name) {
this.name = name;
}
/**
* 记录一天的工作
*/
public final void workOneDay() {
System.out.println("---------------------work start------------------");
enterCompany();
computerOn();
work();
computerOff();
exitCompany();
System.out.println("-----------------work end ---------------");
}
/**
* 工作
*/
public abstract void work();
/**
* 关闭电脑
*/
private void computerOff() {
System.out.println(name + "关闭电脑");
}
/**
* 打开电脑
*/
private void computerOn() {
System.out.println(name + "打开电脑");
}
/**
* 进入公司
*/
public void enterCompany() {
System.out.println(name + "进入公司");
}
/**
* 离开公司
*/
public void exitCompany() {
System.out.println(name + "离开公司");
}
}
package 模板方法模式;
public class ItWorker extends Worker{
public ItWorker(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println(name + "写程序,改bug");
}
}
package 模板方法模式;
public class HRWorker extends Worker{
public HRWorker(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println(name + "看简历,打电话,接电话");
}
}
package 模板方法模式;
public class ManagerWorker extends Worker{
public ManagerWorker(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println(name + "玩吃鸡,打lol");
}
}
package 模板方法模式;
public class TestWorker extends Worker{
public TestWorker(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println(name + "写测试用例,提bug");
}
}
最后进行测试:
package 模板方法模式;
public class test {
public static void main(String[] args) {
Worker t1 = new ItWorker("魏源宏");
t1.workOneDay();
Worker t2 = new HRWorker("迪迪");
t2.workOneDay();
Worker t3 = new TestWorker("张三");
t3.workOneDay();
Worker t4 = new ManagerWorker("王二狗");
t4.workOneDay();
}
}
贴出输出结果:
---------------------work start------------------
魏源宏进入公司
魏源宏打开电脑
魏源宏写程序,改bug
魏源宏关闭电脑
魏源宏离开公司
-----------------work end ---------------
---------------------work start------------------
迪迪进入公司
迪迪打开电脑
迪迪看简历,打电话,接电话
迪迪关闭电脑
迪迪离开公司
-----------------work end ---------------
---------------------work start------------------
张三进入公司
张三打开电脑
张三写测试用例,提bug
张三关闭电脑
张三离开公司
-----------------work end ---------------
---------------------work start------------------
王二狗进入公司
王二狗打开电脑
王二狗玩吃鸡,打lol
王二狗关闭电脑
王二狗离开公司
-----------------work end ---------------
这就是模板方法模式了