模板方法模式:
定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。
下面来个例子展示下本公司的上班情况(纯属娱乐,如有雷同,请对号入座)。简单描述一下:本公司有程序猿、测试、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 ---------------这就是模板方法模式了