定义一个操作中的算法框架,而将一些步骤延迟到子类中,
使得子类不改变算法的结构即可重复定义算法的某些特点步骤。
AbstractClass抽象类,定义算法结构,还可以提供通用实现
ConcreteClass具体实现类,选择性的重定义算法中某些特定步骤
一些方法通用,却在每一个子类都重新写了这一方法。
优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
有多个子类共有的方法,且逻辑相同
重要的、复杂的方法,可以考虑作为模板方法。
为防止恶意操作,一般模板方法都加上 final 关键词
/**
* <p>
* AbstractClass抽象类,定义算法结构,还可以提供通用实现
*/
public abstract class Person {
void eat() {
Log.d("huangxiaoguo", "吃");
}
abstract void drink();
abstract void whore();
abstract void gamble();
abstract void smoke();
public final void play() {
eat();
drink();
whore();
gamble();
smoke();
}
}
/**
* <p>
* ConcreteClass具体实现类
*/
public class Men extends Person {
@Override
void drink() {
Log.d("huangxiaoguo", "喝");
}
@Override
void whore() {
Log.d("huangxiaoguo", "嫖");
}
@Override
void gamble() {
Log.d("huangxiaoguo", "赌");
}
@Override
void smoke() {
Log.d("huangxiaoguo", "抽");
}
}
/**
* 模板方法
*/
Person men = new Men();
men.play();