2019独角兽企业重金招聘Python工程师标准>>>
模板方法模式
定义1个操作中的流程骨架,而流程实现延伸到子类中去,使得子类可不改变一个流程结构,即可重新定义改流程的某些特定步骤
角色
- 父类角色:提供模板:定义操作的所有流程
- 子类角色:为模板某些方法提供具体的实现
父类角色:PrintTemplate
package com.zhiwei.template;
public abstract class PrintTemplate {//定义公用方法的抽象方法,由子类实现(可变方案)public abstract void printHead(); //打印头部public abstract void printBody(); //打印正文public abstract void printTail(); //打印尾部//创建模板方法,实现完整的功能,不变的有模板内部实现,可变的子类实现public void print(){this.initializePrinter(); this.printHead(); this.printBody();this.printTail();}//打印机在开始工作的时候必须进行连接,可以使不变的部分,不需要子类去实现public void initializePrinter(){System.out.println("电脑正在连接打印机......");}
}
子类角色:
package com.zhiwei.template;/*** 模板方法的具体实现类:* 作用:根据自定义的需求,实现父类相关的抽象方法实现对应的功能* @author Yang ZhiWei**/
public class PrintScheme01 extends PrintTemplate {@Overridepublic void printHead() { //实现抽象方法,达到个性化定制的目的,被父类模板方法回调使用System.out.println("正在按照第01种方案打印文件头部..........");}@Overridepublic void printBody() {System.out.println("正在按照第01种方案打印文件正文..........");}@Overridepublic void printTail() {System.out.println("正在按照第01种方案打印文件尾部..........");}}
package com.zhiwei.template;
public class PrintScheme02 extends PrintTemplate{@Overridepublic void printHead() { //实现抽象方法,达到个性化定制的目的System.out.println("正在按照第02种方案打印文件头部..........");}@Overridepublic void printBody() {System.out.println("正在按照第02种方案打印文件正文..........");}@Overridepublic void printTail() {System.out.println("正在按照第02种方案打印文件尾部..........");}
}
测试代码:
package com.zhiwei.template;
public class TemplateTest {public static void main(String[] args) {//方案1PrintTemplate printTemplate = new PrintScheme01();printTemplate.print();System.out.println("-------------------");//方案2printTemplate = new PrintScheme02();printTemplate.print();}
}
通俗解释: 创建PPT文件
使用ms-PowePoint模板,PPT模板为用户创建完整的PPT文件提前做了一些样式设置等工作(父类的实现方法),而用户根据需要将自己的想法和内容填入PPT模板(子类对父类的抽象方法的实现),最后形成完整的PPT文件,完成PPT文件的创建过程。用户自己修改PPT模板、填入内容等操作都被PowerPoint(父类角色)给限定,不同的人可根据同一个PPT模板创建不同的PPT文件。