模板方法模式 - 大学新生报到案例

每年9月份,大学生开学季,社会主义的接班人们将进入向往的大学学习.....

大学报到有一个流程,咱们目前就简单分为两步,1.找学校,2.交学费

任何专业的学生都要执行找学校,但是每个专业的学生的学费价格有所不同

那我们就来实现大学报到。

一、报到第一步:找学校。

报到第一步找学校,这点就不用解释了。。

public abstract class Register {
    /**
     * 去学校
     */
    public final void goToSchool() {
        System.out.println("大学新生报到:先到学校...");
        pay();//找到学校后就要交学费。。
    }
    /**
     * 交学费
     */
    public abstract void pay();
}

此代码pay(交学费)为抽象函数,子类继承实现的时候,重写此函数。然后会在goToSchool中执行此函数。

二、报到第二步:交学费

报道完了,就要交学费了。。

此代码pay(交学费)为抽象函数,子类继承实现的时候,重写此函数。然后会在goToSchool中执行此函数。

此时,我们定义两个专业的大学生,分别为计算机专业和数学专业。

因为大学生报到,第一步找学校,肯定是公共的。

但是,第二步,交学费,就是按照专业的不同,而学费有差异。

首先定义一个计算机专业的学生

public class ITStudent extends Register {

    @Override
    public void pay() {
        // TODO Auto-generated method stub
        System.out.println("计算机专业学费1万");
    }

}

然后定义一个,数学专业的学生

public class MathStudent extends Register {

    @Override
    public void pay() {
        // TODO Auto-generated method stub
        System.out.println("数学专业学费5000");
    }

}

三、实现

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Register reg = new ITStudent();
        reg.goToSchool();

        Register reg1 = new MathStudent();
        reg1.goToSchool();
    }

}

四、总结

此设计模式较为简单,一句话总结为:在父类中定义方法(上例中的pay方法),根据不同的子类,延迟在子类中得到不同的实现。

注意,goToSchool要为final,因为这个方法,不允许被子类重写的。

原文地址:https://www.cnblogs.com/zh1996/p/10348897.html

时间: 2024-09-30 19:09:20

模板方法模式 - 大学新生报到案例的相关文章

JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 final,故名思意,就是最终的意思,由以上的五种特性,不过final的出现,也是有

"围观"设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式.让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤.----WIKIPEDIA 个人理解 模板方法模式相对而言比较简单,一般的都是由抽象类定义好模板方法,然后,子类通过继承并实现其父类中定义好的模板中需要执行的具体的方法,调用子类对象的模板方法时,会执行该类中的具体实现的方法.这个模式我个人的感觉有点像是面向过程的操作,执行完一道工序,接着下一道工序. 案例解析 模板方法相对来说比较简单,这里只列举一个例子供大

“Head First 设计模式“ :模板方法模式

模板方法模式 定义:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤.模板方法就是一个固定步骤的"算法"骨架方法.这个算法的可变部分通过继承,在子类中重载实现.这样就可以在算法骨架不变的情况下,算法细节步骤根据不同的需求进行适应的改变,类图如下: 优点:● 模板方法模式在定义了一组算法,将具体的实现交由子类负责.● 模板方法模式是一种代码复用的基本技术.● 模板方法模式导致一种反向的控制结构,通

设计模式(七)_模板方法模式

模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的 方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. UML类图 举例说明 比如我们做饭,我要煮面条.分为下面几个步骤 打开抽油烟机 生火 煮面条 关火 关闭油烟机 用代码实现 public class CookNoodles{ public void open() { System.out.println("

《JavaScript设计模式与开发实践》读书笔记之模板方法模式

1. 模板方法模式 1.1 面向对象方式实现模板方法模式 以泡茶和泡咖啡为例,可以整理为下面四步 把水煮沸 用沸水冲泡饮料 把饮料倒进杯子 加调料 首先创建一个抽象父类来表示泡一杯饮料 var Beverage=function(){}; Beverage.prototype.boilWater=function(){ console.log('把水煮沸'); }; Beverage.prototype.brew=function(){};//空方法,由子类重写 Beverage.prototy

面向对象编程思想-模板方法模式

一.引言 说到模板,顾名思义:就是样板,整体架构已经有了,你只需要填充自己的特定内容就可以了.如:简历模板,论文模板,PPT模板等 在软件设计中,模板方法模式与之很相似,下面请看我们今天要学习的模板方法模式 二.模板方法模式 定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 下面结构图: 抽象模板角色(AbstractClass):在抽象类中定义一个或多个基本操作,每一个操作对应算法中一个步骤:同时提供一个模板方法

(九)模板方法模式

  转载:http://www.cnblogs.com/zuoxiaolong/p/pattern10.html 模板方法模式,这是一个在许多优秀的开源项目中LZ见的最多的一个设计模式,也是LZ觉得最为优秀的一个设计模式,所以这一章LZ会尽自己所能的去尽量将这个设计模式解释清楚. 模板方法模式,一般是为了统一子类的算法实现步骤,所使用的一种手段或者说是方式.它在父类中定义一系列算法的步骤,而将具体的实现都推迟到子类. 最典型的形式就是一个接口,一个抽象父类,父类中会有一系列的抽象方法,而在子类中

java设计模式 模板方法模式Template Method

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因.

模板方法模式

定义:一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体行为; 意图:定义了一个在操作中的一个算法框架,把一些步骤推迟到子类中去实现.模板方法模式让子类不需要改变算法结构而重定义特定的算法步骤; 比如 Work(){ ①   准备 ②   实施 ③   结束 } 可以将第二步实施声明为抽象方法,因为每个人实施的过程不同 1 public class TemplateDemo{ 2 public static void main(String []atgs){ 3 Teac