首页 > 编程语言 >Java的模板模式 - 设计模式之行为模式

Java的模板模式 - 设计模式之行为模式

时间:2024-10-23 13:47:06浏览次数:3  
标签:Java void Football game 模式 Game 设计模式 方法 模板

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

在Java中,模板模式通常通过抽象类来实现。下面是一个使用模板模式的示例代码,以及详细的解释:

// 抽象类,定义了模板方法和基本操作
abstract class Game {
    // 模板方法,定义了游戏的基本流程
    final void play() {
        initialize();
        startPlay();
        endPlay();
    }

    // 初始化游戏
    abstract void initialize();

    // 开始游戏
    abstract void startPlay();

    // 结束游戏
    abstract void endPlay();
}

// 具体实现类1
class Football extends Game {
    @Override
    void initialize() {
        System.out.println("Football Game Initialized! Start playing.");
    }

    @Override
    void startPlay() {
        System.out.println("Football Game Started. Enjoy the game!");
    }

    @Override
    void endPlay() {
        System.out.println("Football Game Finished!");
    }
}

// 具体实现类2
class Basketball extends Game {
    @Override
    void initialize() {
        System.out.println("Basketball Game Initialized! Start playing.");
    }

    @Override
    void startPlay() {
        System.out.println("Basketball Game Started. Enjoy the game!");
    }

    @Override
    void endPlay() {
        System.out.println("Basketball Game Finished!");
    }
}

public class TemplatePatternDemo {
    public static void main(String[] args) {
        Game game = new Football();
        game.play(); // 执行足球游戏流程
        System.out.println();
        game = new Basketball();
        game.play(); // 执行篮球游戏流程
    }
}

详解:

  1. 抽象类 Game:

    • play() 方法是模板方法,定义了游戏的基本流程。这个方法是 final 的,意味着子类不能重写这个方法,从而保证了算法结构的稳定性。
    • initialize()startPlay()endPlay() 是抽象方法,由具体的子类实现。这些方法代表游戏的不同阶段,子类可以根据需要提供具体的实现。
  2. 具体实现类 FootballBasketball:

    • 这两个类分别实现了 Game 类的抽象方法。每个方法都提供了特定的实现,以完成各自的游戏逻辑。
    • 例如,Football 类在 initialize() 方法中打印 "Football Game Initialized! Start playing.",在 startPlay() 方法中打印 "Football Game Started. Enjoy the game!",在 endPlay() 方法中打印 "Football Game Finished!"。
  3. 客户端代码 TemplatePatternDemo:

    • 在 main 方法中,创建了 Football 和 Basketball 对象,并调用它们的 play() 方法。由于 play() 方法是在 Game 类中定义的模板方法,因此它会按照定义的顺序依次调用 initialize()startPlay()endPlay() 方法。
    • 输出结果展示了不同游戏的具体实现。

总结:

模板模式通过在抽象类中定义一个模板方法来控制算法的执行顺序,同时允许子类覆盖某些步骤以提供具体的实现。这种模式的优点在于它能够复用代码、减少重复,并且使得算法的结构更加清晰。

标签:Java,void,Football,game,模式,Game,设计模式,方法,模板
From: https://blog.csdn.net/LA1245780/article/details/143182312

相关文章

  • 虚拟机设置静态IP并启用桥接模式
    虚拟机设置静态IP并启用桥接模式一、准备工作在开始之前,请确保你已经安装了VMware或其他虚拟机软件,并且已经创建了一个虚拟机实例。此外,还需要了解宿主机的网络配置,包括IP地址、子网掩码、网关等信息,可通过ipconfig/all查看。记录上述信息:IPv4地址:10.10.97.210子网掩码:25......
  • 大数据的计算模式
    大数据的计算模式可以分为批量计算(batchcomputing)和流式计算(streamcomputing)两种形态。批量计算首先进行数据的存储,然后对存储的静态数据进行集中计算。Hadoop是典型的大数据批量计算架构,由HDFS分布式文件系统负责静态数据的存储,并通过MapReduce将计算逻辑分配到各数据节......
  • 【JAVA毕业设计】基于Vue和SpringBoot的课程作业管理系统
    本文项目编号T023,文末自助获取源码\color{red}{T023,文末自助获取源码}......
  • 【JAVA毕业设计】基于Vue和SpringBoot的大学生入学审核系统
    本文项目编号T022,文末自助获取源码\color{red}{T022,文末自助获取源码}......
  • JavaScript 第27章:构建工具与自动化
    在现代JavaScript开发中,构建工具、代码转换工具、代码质量和代码格式化工具对于提高开发效率、保持代码整洁以及确保代码质量有着至关重要的作用。下面将分别介绍Webpack、Babel、ESLint和Prettier的配置与使用,并给出一些示例。1.构建工具:Webpack配置与使用Webpack是一个......
  • java毕业设计下载(全套源码+配套论文)——基于java+jsp+Servlet的B2C网上拍卖系统设计与
    基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码)大家好,今天给大家介绍基于java+jsp+Servlet的B2C网上拍卖系统设计与实现,更多精选毕业设计项目实例见文末哦。文章目录:基于java+jsp+Servlet的B2C网上拍卖系统设计与实现(毕业论文+程序源码)1、项目简......
  • 黑马JavaWeb-day03
    目录Ajax前后端分离开发前端工程化环境准备Vue项目Vue项目开发流程Vue组件库ElementVue路由打包部署AjaxAjax:AsynchronousJavaScriptAndXML,异步的JavaScript和XML作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器相应的数据异步交互:可以在不重新加载整个页......
  • DevExpress中文教程 - 如何在静态SSR模式下使用Blazor Drawer组件?
    Microsoft的.NET8UI框架引入了静态服务器端呈现模式(静态SSR)——组件在服务器端呈现,然后返回到客户端,没有任何交互,DevExpress BlazorDrawer组件需要交互式呈现模式来动态地改变其IsOpen状态。在本文中,我们将回顾在静态SSR渲染模式下动态显示/隐藏DevExpressBlazorDrawer组......
  • 原创计算机毕业设计—69271 django重大公告卫生事件物资管理系统 (源码免费领)定制程序
    摘要随着信息技术的快速发展,计算机应用已经进入成千上万的家庭。随着物资数量的增加,物资库存管理也存在许多问题。物资数据的处理量正在迅速增加,原来的手工管理模式不适合这种形式。使用计算机可以完成数据收集、处理和分析,减少人力和物力的浪费。需要建立重大公告卫生事件......
  • JavaSE——IO流5:高级流(序列化与反序列化流/对象操作流)
    目录一、序列化流/对象操作输出流——ObjectOutputStream二、反序列化流/对象操作输入流——ObjecInputStream三、序列化流和反序列化流使用细节1.Serializable接口2.序列化后的文件不可修改3.serialVersionUID4.transient修饰的不能被序列化四、用对象流读写多个对象......