定义
父类提供一个统一的方法调用一系列方法,子类可以按需重新方法实现,该模式属于行为型模式。
应用场景
多个类有很多共通的方法和差不多的流程。
优点
1.避免重复的代码
2.方便管理统一的方法
缺点
可能会导致子类数量过多
常见实例
1.BaseActivity中的抽象方法,例如:initListener()
具体代码实现
例子说明:运动一般都有一套流程差不多,比如先热身,然后准备运动,然后运动,再然后结束,最后休息一下。
抽象类
package com.elaine.testpattern.template;
/**
* 运动
* author: elaine
* date: 2021/4/28
*/
public abstract class Sport {
//热身
protected abstract void ready();
//开始
protected abstract void start();
//运动
protected abstract void exercising();
//结束
protected abstract void end();
//休息
protected abstract void rest();
//锻炼
public final void exercise() {
ready();
start();
exercising();
end();
rest();
}
}
实体类
打乒乓球运动
package com.elaine.testpattern.template;
import android.util.Log;
/**
* 打乒乓球
* author: elaine
* date: 2021/4/28
*/
public class PlayTableTennis extends Sport {
@Override
protected void ready() {
Log.e("运动===", "热身");
}
@Override
protected void start() {
Log.e("运动===", "乒乓球开始运动");
}
@Override
protected void exercising() {
Log.e("运动===", "乒乓球运动中");
}
@Override
protected void end() {
Log.e("运动===", "乒乓球结束运动");
}
@Override
protected void rest() {
Log.e("运动===", "打球结束休息");
}
}
跑步
package com.elaine.testpattern.template;
import android.util.Log;
/**
* 跑步
* author: elaine
* date: 2021/4/28
*/
public class Run extends Sport {
@Override
protected void ready() {
Log.e("运动===", "热身");
}
@Override
protected void start() {
Log.e("运动===", "跑步开始");
}
@Override
protected void exercising() {
Log.e("运动===", "跑步中");
}
@Override
protected void end() {
Log.e("运动===", "跑步结束");
}
@Override
protected void rest() {
Log.e("运动===", "跑步结束休息");
}
}
运行代码
private void use() {
Sport sport = new PlayTableTennis();
sport.exercise();
Sport run = new Run();
run.exercise();
}