文档章节

【行为型】- 模板方法模式

ZeroneLove
 ZeroneLove
发布于 02/23 11:00
字数 738
阅读 23
收藏 0

模板方法模式

定义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文件。

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
设计模式之禅之设计模式-模板方法模式

一:模板方法模式的定义 --->定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 --->模板方法模式确实非常简单,仅仅...

无信不立
2016/01/04
0
0
设计模式 ——— 模板方法模式

TEMPLATE METHOD(模板方法) ———— 类行为型模式 意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

tomas家的小拨浪鼓
2017/11/11
0
0
设计模式----模板方法模式

模板方法模式: 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法模式的结构: 抽象类:实现了模...

Superheros
2017/11/11
23
0
模板方法(Template Method)模式

  模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽...

小菜鸡1
2016/08/28
11
0

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
今天
15
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
5
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.4K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部