抽象类与模板方法模式

抽象类

  • 抽象类不能被实例化,它只能被后代继承。
  • 含抽象方法的类一定是抽象类,但抽象类不一定含抽象方法(虽然这极少见)
  • 继承自抽象类的非抽象类,必须实现父类的全部抽象方法
  • 抽象方法中可以由具体方法以及字段
package com.studyjava.demo;

public class Demo3
{
    public static void main (String[] args) 
    {
        var student = new Student();
        var teacher = new Teacher();

        System.out.println(student.getDesc());
        System.out.println(teacher.getDesc());
    }
}

abstract class Person
{
    private String name;

    public abstract String getDesc ();

    public String getName ()
    {
        return this.name;
    } 
}

class Student extends Person
{
    public String getDesc ()
    {
        return "student";
    }
}

class Teacher extends Person
{
    public String getDesc ()
    {
        return "teacher";
    }
}

模板方法模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。

abstract class Template {
    public final void getTime() {
        long start = System.currentTimeMillis();
        code();
        long end = System.currentTimeMillis();
        System.out.println("执行时间是:" + (end - start));
    }

    public abstract void code();
    }
}

class SubTemplate extends Template {
    public void code() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(i);
        }
    }
}