首页 > 其他分享 >20230421 10. 模板方法模式 - 试卷答题

20230421 10. 模板方法模式 - 试卷答题

时间:2023-06-19 09:59:01浏览次数:40  
标签:10 20230421 String 答题 子类 println TestPaper public 模板

既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复

当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理

模板方法(Template Method)模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式

  • AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
  • ConcreteClass,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。

模板方法模式就是提供了一个很好的代码复用平台

代码示例 - 试卷

模板类

public abstract class TestPaper {
    public void test1() {
        System.out.println("试题1");
        System.out.println("答案1:" + answer1());
    }

    protected abstract String answer1();

    public void test2() {
        System.out.println("试题2");
        System.out.println("答案2:" + answer2());
    }

    protected abstract String answer2();
}

具体子类

public class TestPaperA extends TestPaper {
    @Override
    public String answer1() {
        return "A";
    }

    @Override
    public String answer2() {
        return "A";
    }
}


public class TestPaperB extends TestPaper {
    @Override
    public String answer1() {
        return "B";
    }

    @Override
    public String answer2() {
        return "B";
    }
}

客户端

public class Test {
    public static void main(String[] args) {
        TestPaper studentA = new TestPaperA();
        studentA.test1();
        studentA.test2();

        System.out.println("-----------------------");

        TestPaper studentB = new TestPaperB();
        studentB.test1();
        studentB.test2();
    }
}

标签:10,20230421,String,答题,子类,println,TestPaper,public,模板
From: https://www.cnblogs.com/huangwenjie/p/17490354.html

相关文章

  • 20230421 14. 观察者模式 - 摸鱼通知
    观察者模式又叫作发布-订阅(Publish/Subscribe)模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个......
  • 20230421 13. 建造者模式 - 画小人
    '建造者模式(Builder)',又叫生成器模式建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。Builder是为创建一个Pro......
  • 10个ai算法常用库java版
    根据AI项目的具体需求,可以选择最合适的库或框架,并开始尝试使用不同的算法来构建AI解决方案。1.Deeplearning4j 它是一个用于Java和Scala的开源分布式深度学习库。Deeplearning4j支持各种深度学习架构,包括卷积神经网络(CNN)、递归神经网络(RNN)和深度信念网络(DBN......
  • Ubuntu 23.10 将引入安全增强的 PPA
    导读 Ubuntu的升级不断地增强功能并添加安全修复程序。但是,很少见到一些核心机制的更改。 在Ubuntu23.10中,PPA的功能得到了改进。至少,你在终端中看到警告会更少。这是什么意思呢?让我详细说明一下。GPG密钥问题传统上,PPA和其他外部存储库是通过 /etc/apt......
  • Nvidia 3060显卡 CUDA环境搭建(Ubuntu22.04+Nvidia 510+Cuda11.6+cudnn8.8)
    写在前面工作中遇到,简单整理理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧——赫尔曼·黑塞《德米安》当前系统环境系统环境┌......
  • Java代码精简之道-10条代码精简方案
    场景一、Java中利用try-with-resource语句JDK7开始新增了对需要关闭资源处理的特殊语法try-with-resource。所有实现Closeable接口的“资源”,均可采用try-with-resource进行简化。例如InputStream,OutputStream,Connection,Statement,ResultSet等接口都实现了,使用try-with-reso......
  • 【10篇热门博客文章】语音搜索技术在人工智能中的应用与发展趋势
    目录语音搜索技术在人工智能中的应用与发展趋势摘要:随着语音交互技术的不断发展,语音搜索技术在人工智能中的应用越来越广泛。本文从语音搜索技术的原理、实现步骤、应用示例和优化改进等方面进行论述,旨在为读者提供更深入、更全面的理解。文章还总结了语音搜索技术在人工智能领......
  • 【10篇热门博客文章】基于语音识别的智能教育系统设计与实现
    目录智能教育系统是当前人工智能技术应用的一个热门话题。随着人工智能技术的不断发展,智能教育系统也在逐渐完善,能够为学生提供更加智能化的学习体验。本文将介绍基于语音识别的智能教育系统设计与实现,希望能够帮助到读者。一、引言智能教育系统是一种基于人工智能技术的教育系......
  • Games101-Cp3-Shading
    Shading的过程就是对物体应用材质的过程。Shading\(\not=\)Shadow。着色模型不包括阴影。Z-Buffering深度缓存用于做深度测试时对深度进行比较。在\([0,1]\)之间取值。应该是可视范围与深度的相除?在开启深度测试的时候,与深度缓存进行比较。如果小于对应像素的深度值则绘制。B......
  • 算法练习-day10
    栈和队列20.有效的括号题意:给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号示例:    思路:本题我有两种思路,1.双栈存储:我们可......