编程模式之模板方法模式(Template Method)

模板方法模式由两个角色组成:父类角色,子类角色

父类角色:提供模板。

子类角色:为父类模板提供实现。

类图:

JAVA代码:

AbstractClass.java

package com.templatemethod;

public abstract class AbstractClass
{
    /**
     * 定义了算法的骨架,即步骤
     */
    public void template()
    {
        this.method1();
        this.method2();
        this.method3();
    }

    /**
     * 子类可以重写这些方法
     */
    public abstract void method1();
    public abstract void method2();
    public abstract void method3();
}

ConcreteClass.java

package com.templatemethod;

public class ConcreteClass extends AbstractClass
{

    @Override
    public void method1()
    {
        System.out.println("Step 1");
    }

    @Override
    public void method2()
    {
        System.out.println("Step 2");
    }

    @Override
    public void method3()
    {
        System.out.println("Step 3");
    }

}

Test.java

package com.templatemethod;

public class Test
{
    public static void main(String[] args)
    {
        AbstractClass ac = new ConcreteClass();
        ac.template();
    }

}

总结:模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中去实现,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。这里需要复用的是算法的结构,也就是步骤,而每个步骤的实现可以在子类中完成。

时间: 2024-12-20 09:04:10

编程模式之模板方法模式(Template Method)的相关文章

设计模式的征途—17.模板方法(Template Method)模式

在现实生活中,很多事情都需要经过几个步骤才能完成,例如请客吃饭,无论吃什么,一般都包含:点单.吃东西.买单等几个步骤,通常情况下这几个步骤的次序是:点单=>吃东西=>买单.在这3个步骤中,点单和买单大同小异,最大的区别在于第2步-吃什么?吃面条和吃满汉全席可大不相同. 在软件开发中,有时候也会遇到类似的情况,某个方法的实现需要多个步骤(类似于“请客”),其中有些步骤是固定的,而有些步骤则存在可变性.为了提高代码复用性和系统灵活性,可以使用一种称之为模板方法模式的设计模式来对这类情况进行设计.

java 策略模式 模板方法 (Template method) 示例

<pre name="code" class="cpp">package org.rui.pattern; import junit.framework.TestCase; /** * 分解共同性(Factoring Commonality ) * 应用"一次且只能有一次" 原则产生最基本的模式,将变化的那部分代码放到方 法里. 这可以用两种方法来表达: 策略模式(Strategy * ):运行时刻选择算法 另外,Strategy 模

Android设计模式之命令模式、策略模式、模板方法模式

命令模式是其它很多行为型模式的基础模式.策略模式是命令模式的一个特例,而策略模式又和模板方法模式都是算法替换的实现,只不过替换的方式不同.下面来谈谈这三个模式. 命令模式 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. java中传递(注入)对象很容易,但是却不支持直接传递行为(即传递函数或者说传递方法),只能间接的通过传递(注入)一个对象,再调用它的行为来实现.如果把这样的行为抽取出来为一个类,称作命令类,它的具体实现都是命令

建造者模式和模板方法模式扩展篇

建造者模式和模板方法模式扩展篇 UML 与抽象工厂模式比较 本模式可以看出与抽象工厂非常类似,都是产生不同的产品,怎么区分这两种设计的使用场景呢 - 建造者模式关注的是基本方法的调用顺序,而零件(基本方法)已经准备好 - 抽象工厂关注的零件的生产(基本方法的实现),而组装顺序已经确定 实现 产品抽象 public abstract class Product { public abstract void doSomeThing(); } 产品A public class AProduct ext

【java设计模式】之 模板方法(Template Method)模式

1. 模板方法的一个实例 这一节主要来学习一下设计模式中的模板方法模式.我们先来看一个例子:假如现在老板让你做一个汽车的模型,要求只要完成基本功能即可,不考虑扩展性,那你会怎么做呢?我们首先会根据经验设计一个类图: 由这个类图可知,非常简单的实现了悍马车,该车有两个型号H1和H2.那现在我们开始实现这两个型号的悍马车,首先我们得把抽象类写好,然后两个不同的模型实现类通过简单的继承就可以实现要求.首先看看抽象类的代码: public abstract class HummerModel { pub

C#设计模式之行为类模式:模板方法模式

定义(Template Method) 定义一个操作中算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 启示 组装电脑一般包含三个部分,主机.显示器.输入设备(键鼠),而不同品牌电脑的组装都各不相同,但是最终组装成一部完整的电脑的步骤都是固定一样的.定义抽象类,暴露主机.显示器.输入设备(键鼠)的组装给具体厂商去实现,提供一个公共的最终组装方法. /// <summary> /// 组装电脑 /// </summary> pub

设计模式——行为型模式之模板方法模式(一)

模板模式 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型模式. 介绍 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 主要解决:一些方法通用,却在每一个子类都重新写了这一方法. 何时使用:有一些通用的方法. 如何解决:将这些通用算法抽象出来. 关键代码:在抽象类实现,其

java模式之-模板方法模式

模板方法模式是java设计模式常见的模式之一. <JAVA与模式>中写道: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 下面是自己写的小demo,便于理解模板方法模式. 1.父类 package com.westward; public abstract class GoToCity { /** *

原型模式和模板方法模式(C++)

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 其中心思想就是克隆.举个例子,我们经常性需要复印身份证复印件,有时需要几张,其实就是克隆,关于代码和UML类图,我就不再多描述了,因为这个太简单了,就是定义一个拷贝构造函数,定义一个clone函数,在clone里面new this指针就可以了. 我还是主要记录下模板方法模式吧,感觉这个还是蛮有意思的. 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中实现. 举个例子,我们在开发中,经常需要写DD,也就是