设计模式之——Template模板模式

Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式。当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的那样进行。

示例程序:

将一段字符串和字符循环显示五次的程序:

  • AbstractDisplay 父类抽象的模板,里面定义了处理流程,但是没有具体把实现写出来
package site.wangxin520.gof.template;

/**
 * 模板模式的模板,使用的是抽象类和抽象方法。
 * 在此模板中,定义一个模板的实现,以及需要子类去实现的抽象方法。
 * 当子类实现抽象方法之后,便可以在本模板中固定的代码逻辑里面调用
 * @author wangXgnaw
 *
 */
public abstract class AbstractDisplay {

    /**
     * 定义一些抽象方法,具体实现等子类进行
     */
    protected abstract void open();
    protected abstract void print();
    protected abstract void close();

    /**
     * 定义模板执行的代码逻辑
     * 将字符串和字符循环显示5次
     */
    public final void display(){
        open();
        for (int i = 0; i < 5; i++) {
            print();
        }
        close();
    }
}
  • CharDisplay 子类实现了父类模板的抽象方法,处理字符
package site.wangxin520.gof.template;

/**
 * 字符显示操作的子类,继承模板
 * @author wangXgnaw
 *
 */
public class CharDisplay extends AbstractDisplay{

    private Character ch;
    /**
     * 构造函数
     * @param ch 传入字符参数
     */
    public CharDisplay(Character ch) {
        this.ch=ch;
    }

    /*
     * 后面就是重写父类模板定义的抽象方法
     * @see site.wangxin520.gof.template.AbstractDisplay#open()
     */
    @Override
    protected void open() {
        System.out.print("(");
    }

    @Override
    protected void print() {
        System.out.print(ch);
    }

    @Override
    protected void close() {
        System.out.println(")");
    }

}
  • StringDisplay 子类实现了父类的模板抽象方法,处理字符串
package site.wangxin520.gof.template;

/**
 * 字符串显示操作的模板子类,继承自模板
 * @author wangXgnaw
 *
 */
public class StringDisplay extends AbstractDisplay{

    private String string;

    /**
     * 构造函数,传入一个字符串
     * @param string
     */
    public StringDisplay(String string) {
        this.string=string;
    }

    /**
     * 后面就是重写父类的抽象方法
     */
    @Override
    protected void open() {
        System.out.println("+------------------------+");
    }

    @Override
    protected void print() {
        System.out.println(string);
    }

    @Override
    protected void close() {
        System.out.println("+------------------------+");
    }

}
  • TemplateTest 模板模式的测试类
package site.wangxin520.gof.template;

/**
 * 模板模式的测试类
 * @author wangXgnaw
 *
 */
public class TemplateTest {
    public static void main(String[] args) {
        AbstractDisplay ad1=new CharDisplay(‘w‘);
        ad1.display();
        AbstractDisplay ad2=new StringDisplay("wangxin");
        ad2.display();
    }
}
  • 控制台显示:

时间: 2024-08-11 01:21:51

设计模式之——Template模板模式的相关文章

Head First 设计模式系列之一----模板模式

开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣.否则我也不可能,大过年的小伙伴们还在外面耍,自己还在那里装B.可是看完的困惑也随之而来,我怎么才能熟练的操练这些模式呢!书上讲的头头是道,可是实际中我们确不知道怎么运用!后面看到别人牛逼的都是随便一个模式都能脱口面而出,还有就是实际项目接触多了,肯定也有一定的职业嗅觉!所以希望自己也能够通过写博客,让自己对设计模式有一个

Android与设计模式——模板方法(Template Method)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 模板方法模式的结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 模板方法模式需要开发抽象类和具体子类的设计师之间的协作

一天一个设计模式——模板方法(Template Method)模式

一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜料,什么颜色的颜料来印刷文字,取决于具体实际业务场景的需要.由此可见,模板制定了某些固定的条条框框,以及事物的处理标准流程,但是并没有说明如何去做,具体如何做,取决于使用模板的人. 在程序设计领域,模板是具有一系列抽象方法的接口类,单看接口类,我们只能知道这个模板有哪些抽象方法以及这些方法的调用顺序

设计模式之GOF23模板模式

模板模式template method 场景:具有具体流程,但具体某一步的业务不同 到银行办理业务:排队取号,办理业务,给员工打分 请客吃饭:等待,点单,吃饭,结账 模板方法模式介绍:模板方法是编程常用的模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤. 核心:处理步骤(流程)由父类定义好,具体实现延迟到子类中定义 结构:抽象父类(决定流程以及抽象的业务方法等着子类实现),不同的子类实现不同的业务,客户端(

设计模式整理_模板模式

模板模式在父类中定义了一个方法的模板,而子类可以动态的实现模板成分方法,但是模板中的方法顺序无法改变. 父类中的模板方法往往申明为final,用来保证方法不被子类覆盖,因为作为模板,是不可以改变的,但是模板方法内的一系列方法,可以由子类自己静态实现,同时在父类的模板方法中,可以定义钩子(hook)方法.方便子类对于模板方法的优化.下面用两个例子说明. /*没有钩子(hook)的模板方法,此时模板方法无法修改*/ public abstract class Model { public final

行为模式之Template(模板模式)

模板模式定义一系列的操作流程,并将其中的一个或多个操作的实现延迟到子类之中. 我们以牛奶加工过程为例,当然对其做了简化,具体流程如下图: 首先,将加工过程定义成一个抽象类: AbstractMilkProcess package com.design; /**牛奶加工过程 * @author wobendiankun *2015-1-21 下午08:01:57 */ public abstract class AbstractMilkProcess { /** *挤奶 */ protected

设计模式(3)Template模板设计模式

一.什么是模板模式 在父类中定义处理流程的框架,在子类中实现具体的处理的模式. 二.示例类 AbstractDisplay : 只实现display方法的抽象类 CharDisplay : 实现了open,print,close具体方法的类 StringDisplay : 实现了open,print,close具体方法的类 Main : 测试程序行为的类 三.分析 1.首先先看AbstractDisplay,他是一个模板,假如他想要打开文件,调用输出五次,再关闭. public abstract

Java设计模式—单例模式和模板模式

1.单例模式方法:类构造方法私有的,类里面有个静态类对象用来保存这个类对象,并且这个类提供获取该类对象的静态方法. /** * 单例设计模式 * @author Admin * */ public class Design1 { private String name; private static Design1 d; private Design1(String name){ this.name = name; } public static Design1 getDesign(){ if(

跟我一起透彻理解template模板模式

#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { this->Printf1(); this->Printf2(); } protected: virtual void Printf1() = 0; virtual void Printf2() = 0;//让子类实现算法的具体实现. }; class Son1 : public Base { p