博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模式7. 模板方法模式--Java
阅读量:4035 次
发布时间:2019-05-24

本文共 1387 字,大约阅读时间需要 4 分钟。

1.应用场景

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

2.定义

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

在这里插入图片描述

AbstractClass时抽象类,定义并且实现了一个模板方法,这个模板方法一般是一个具体方法,给出了一个顶级逻辑的框架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。

3.优点:

  • 通过把不变的行为搬移到超类,去除子类中的重复代码来体现他的优势。
  • 提供了一个很好的代码复用平台。
  • 当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法将这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。

4.以学生考试为例

试卷都是一份, 学生交上的卷子只是答案不同。

4.1试卷类 抽象类,

定义试卷的问题以及回答等模板方法

package com.templatemethod;public class TestPaper {
public void TestQuestion1(){
System.out.println("1+1=? A.1 B.2 C.3 D.4"); System.out.println("答案是:"+ this.Answer1()); } //留给子类重写,不同的学生试卷问题都一样,就是答案不同 public String Answer1(){
return ""; }}

4.2学生1, 做卷子

package com.templatemethod;public class Student1 extends  TestPaper{
@Override public String Answer1() {
return "B"; }}

4.3学生2,做卷子

package com.templatemethod;public class Student2 extends TestPaper{
@Override public String Answer1() {
return "A"; }}

4.4客户端类

package com.templatemethod;public class Client {
public static void main(String[] args) {
System.out.println("学生一的试卷:"); TestPaper student1=new Student1(); student1.TestQuestion1(); System.out.println("学生二的试卷:"); TestPaper student2=new Student2(); student2.TestQuestion1(); }}

4.5测试结果

在这里插入图片描述

在这里插入图片描述

转载地址:http://qpfdi.baihongyu.com/

你可能感兴趣的文章
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>