【行为型】- 模板方法模式
< 返回列表时间: 2019-02-23来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
模板方法模式
定义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 { @Override public void printHead() { //实现抽象方法,达到个性化定制的目的,被父类模板方法回调使用 System.out.println("正在按照第01种方案打印文件头部.........."); } @Override public void printBody() { System.out.println("正在按照第01种方案打印文件正文.........."); } @Override public void printTail() { System.out.println("正在按照第01种方案打印文件尾部.........."); } } package com.zhiwei.template; public class PrintScheme02 extends PrintTemplate{ @Override public void printHead() { //实现抽象方法,达到个性化定制的目的 System.out.println("正在按照第02种方案打印文件头部.........."); } @Override public void printBody() { System.out.println("正在按照第02种方案打印文件正文.........."); } @Override public void printTail() { System.out.println("正在按照第02种方案打印文件尾部.........."); } }
测试代码: package com.zhiwei.template; public class TemplateTest { public static void main(String[] args) { //方案1 PrintTemplate printTemplate = new PrintScheme01(); printTemplate.print(); System.out.println("-------------------"); //方案2 printTemplate = new PrintScheme02(); printTemplate.print(); } }
通俗解释: 创建PPT文件
使用ms-PowePoint模板,PPT模板为用户创建完整的PPT文件提前做了一些样式设置等工作(父类的实现方法),而用户根据需要将自己的想法和内容填入PPT模板(子类对父类的抽象方法的实现),最后形成完整的PPT文件,完成PPT文件的创建过程。用户自己修改PPT模板、填入内容等操作都被PowerPoint(父类角色)给限定,不同的人可根据同一个PPT模板创建不同的PPT文件。
热门排行