- 定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f867639f54c183283dd13d3fcc2b37fb.png)
public abstract class Model {
protected abstract void start();
protected abstract void sing();
protected abstract void dancing();
protected abstract void end();
public void templateTest(){
this.start();
this.sing();
this.dancing();
this.end();
}
}
public class FemalModel extends Model{
@Override
protected void start() {
System.out.println("女芭比娃娃启动");
}
@Override
protected void sing() {
System.out.println("女芭比娃娃唱歌");
}
@Override
protected void dancing() {
System.out.println("女芭比娃娃跳舞");
}
@Override
protected void end() {
System.out.println("女芭比娃娃关闭");
}
}
public class MaleModel extends Model{
@Override
protected void start() {
System.out.println("男芭比娃娃启动");
}
@Override
protected void sing() {
System.out.println("男芭比娃娃唱歌");
}
@Override
protected void dancing() {
System.out.println("男芭比娃娃跳舞");
}
@Override
protected void end() {
System.out.println("男芭比娃娃关闭");
}
}
class penple1{
public static void main(String[] args) {
Model maleMode = new MaleModel();
maleMode.templateTest();
Model femalMode = new FemalModel();
femalMode.templateTest();
}
}
輸出:
男芭比娃娃启动
男芭比娃娃唱歌
男芭比娃娃跳舞
男芭比娃娃关闭
女芭比娃娃启动
女芭比娃娃唱歌
女芭比娃娃跳舞
女芭比娃娃关闭
- 扩展:现在需要 女性娃娃跳舞 男性不跳舞 只需要加一个 判断男女性得方法即可
public abstract class Model {
protected abstract void start();
protected abstract void sing();
protected abstract void dancing();
protected abstract void end();
protected abstract boolean isFemal();
public final void templateTest(){
this.start();
this.sing();
if(this.isFemal()){
this.dancing();
}
this.end();
}
}
public class FemalModel extends Model{
@Override
protected void start() {
System.out.println("女芭比娃娃启动");
}
@Override
protected void sing() {
System.out.println("女芭比娃娃唱歌");
}
@Override
protected void dancing() {
System.out.println("女芭比娃娃跳舞");
}
@Override
protected void end() {
System.out.println("女芭比娃娃关闭");
}
@Override
protected boolean isFemal() {
return true;
}
}
public class MaleModel extends Model{
@Override
protected void start() {
System.out.println("男芭比娃娃启动");
}
@Override
protected void sing() {
System.out.println("男芭比娃娃唱歌");
}
@Override
protected void dancing() {
System.out.println("男芭比娃娃跳舞");
}
@Override
protected void end() {
System.out.println("男芭比娃娃关闭");
}
@Override
protected boolean isFemal() {
return false;
}
}
class penple1{
public static void main(String[] args) {
Model maleMode = new MaleModel();
maleMode.templateTest();
FemalModel femalMode = new FemalModel();
femalMode.templateTest();
}
}
输出:
男芭比娃娃启动
男芭比娃娃唱歌
男芭比娃娃关闭
女芭比娃娃启动
女芭比娃娃唱歌
女芭比娃娃跳舞
女芭比娃娃关闭