抽象类与模板方法模式
抽象类
- 抽象类不能被实例化,它只能被后代继承。
- 含抽象方法的类一定是抽象类,但抽象类不一定含抽象方法(虽然这极少见)
- 继承自抽象类的非抽象类,必须实现父类的全部抽象方法
- 抽象方法中可以由具体方法以及字段
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);
}
}
}