Java进阶学习笔记14——模板方法设计模式

面试和看源码。

谈到设计模式:

1、解决了什么问题?

2、怎么写?

模板方法设计模式解决了什么问题?

解决方法中存在重复代码的问题。

写法:

1)定义一个抽象类:

2)在里面定义两个方法:

1> 一个是模板方法,把相同的代码放进去;

2> 一个是抽象方法,具体实现交给子类完成;

People类:

java 复制代码
package cn.ensource.d6_abstact_template;

public abstract class People {
    // 设计模板方法设计模式
    // 1. 定义一个模板方法出来
    public void write() {
        System.out.println("====我的爸爸====");
        System.out.println("我的爸爸好牛啊~");
//        System.out.println("我的爸爸特别牛,开车都不开红绿灯!");
        // 模板方法其实也不清楚正文部分到底应该是怎么写?但是它知道子类必须写的。
        System.out.println(writeMain());
        System.out.println("有这样的爸爸太好了!");
    }

    // 3. 设计一个抽象方法,具体的实现交给子类来完成
    public abstract String writeMain();
}

Teacher类:

java 复制代码
package cn.ensource.d6_abstact_template;

public class Teacher extends People {

    @Override
    public String writeMain() {
        return "我的爸爸特别牛,让我站在这里别走,他去买个橘子!";
    }
}

Student类:

java 复制代码
package cn.ensource.d6_abstact_template;

public class Teacher extends People {

    @Override
    public String writeMain() {
        return "我的爸爸特别牛,让我站在这里别走,他去买个橘子!";
    }
}

测试类:

java 复制代码
package cn.ensource.d6_abstact_template;

public class Test {
    public static void main(String[] args) {
        // 目标:搞清楚抽象类的应用场景,设计模板方法模式
        // 场景:学生和老师都要写一篇作文:我的爸爸
        // 第一段是一样的
        // 正文部分自由发挥
        // 最后一段也是一样的

        Teacher t = new Teacher();
        t.write();

        Student s = new Student();
        s.write();
    }
}

多学一招:

建议使用final关键字修饰模板方法,为什么?

模板方法,禁止子类再去方法重写,防止失效。

模板方法设计模式解决了什么问题?

解决了方法中存在重复代码的问题。

模板方法设计模式应该怎么写?

定义一个抽象类;

在里面定义2个方法,一个是模板方法,放相同的代码,一个是抽象方法:具体实现交给子类完成。

模板方法建议使用什么关键字修饰?为什么?

final,不再让子类方法重写@override。

相关推荐
好家伙VCC2 分钟前
# BERT在中文文本分类中的实战优化:从模型微调到部署全流程在自然语言处理(NL
java·python·自然语言处理·分类·bert
只会写bug的小李子3 分钟前
AI Agent动态规划失效处理:多步执行卡壳时,局部修正远比从头重来更高效
java·开发语言
NGC_66115 分钟前
idea中使用git
java·git·intellij-idea
Renhao-Wan6 分钟前
Java 算法实践(三):双指针与滑动窗口
java·数据结构·算法
Pluchon7 分钟前
硅基计划4.0 算法 图的存储&图的深度广度搜索&最小生成树&单源多源最短路径
java·算法·贪心算法·深度优先·动态规划·广度优先·图搜索算法
带娃的IT创业者23 分钟前
解密OpenClaw系列04-OpenClaw设计模式应用
设计模式·软件工程·软件架构·ai agent·ai智能体开发·openclaw
我命由我1234531 分钟前
Kotlin 面向对象 - 匿名内部类、匿名内部类简化
android·java·开发语言·java-ee·kotlin·android studio·android jetpack
学到头秃的suhian32 分钟前
Redis分布式锁
java·数据库·redis·分布式·缓存
星火开发设计35 分钟前
模板特化:为特定类型定制模板实现
java·开发语言·前端·c++·知识
wzqllwy41 分钟前
Java实战-性能
java