Java中常用的设计模式之模板模式详解

 更新时间:2022年02月27日 11:07:48   作者:Asurplus、  
这篇文章主要为大家详细介绍了Python实现学生成绩管理系统,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

优点

封装不变部分,扩展可变部分。

提取公共代码,便于维护。

行为由父类控制,子类实现。

缺点

每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景

1.有多个子类共有的方法,且逻辑相同。

2.重要的、复杂的方法,可以考虑作为模板方法。

一、实现方式

假设一个场景,我们在玩游戏的时候,都需要初始化加载游戏,然后开始游戏,最后结束游戏,这像是一套模板一样的操作,但是具体的实现方法却不同,例如:LOL 游戏与 CF 游戏的加载资源肯定不同,游戏的内容也不同。

1、游戏抽象类

package com.asurplus.common.template;
/**
 * 游戏抽象类
 */
public abstract class Game {
    // 初始化游戏
    abstract void init();
    // 开始游戏
    abstract void start();
    // 结束游戏
    abstract void end();
    // 模板
    public final void play() {
        // 初始化游戏
        init();
        // 开始游戏
        start();
        // 结束游戏
        end();
    }
}

2、LOL游戏类

package com.asurplus.common.template;
import lombok.extern.slf4j.Slf4j;
/**
 * LOL游戏
 */
@Slf4j
public class LolGame extends Game {
    @Override
    void init() {
        log.info("初始化 LOL 游戏");
    }
    @Override
    void start() {
        log.info("LOL 游戏开始");
    }
    @Override
    void end() {
        log.info("LOL 游戏结束");
    }
}

3、CF游戏类

package com.asurplus.common.template;
import lombok.extern.slf4j.Slf4j;
/**
 * CF游戏
 */
@Slf4j
public class CfGame extends Game {
    @Override
    void init() {
        log.info("初始化 CF 游戏");
    }
    @Override
    void start() {
        log.info("CF 游戏开始");
    }
    @Override
    void end() {
        log.info("CF 游戏结束");
    }
}

二、测试

package com.asurplus.common.template;

/**
 * 模板模式
 */
public class TestMain {
    public static void main(String[] args) {
        // LOL 游戏
        Game lolGame = new LolGame();
        lolGame.play();
        System.out.println();
        // CF 游戏
        Game cfGame = new CfGame();
        cfGame.play();
    }
}

输出结果

在这里插入图片描述

可以看出,一套模板,可以有多个实现方式,从而实现了我们的工厂模式。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!   

相关文章

  • Mybatis配置错误:java.lang.ExceptionInInitializerError

    Mybatis配置错误:java.lang.ExceptionInInitializerError

    这篇文章主要介绍了Mybatis配置错误:java.lang.ExceptionInInitializerError的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringMVC配置多个properties文件之通配符解析

    SpringMVC配置多个properties文件之通配符解析

    这篇文章主要介绍了SpringMVC配置多个properties文件之通配符解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java C++ leetcode执行一次字符串交换能否使两个字符串相等

    Java C++ leetcode执行一次字符串交换能否使两个字符串相等

    这篇文章主要为大家介绍了Java C++ leetcode1790执行一次字符串交换能否使两个字符串相等,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • MyBatis插入时获取自增主键方法

    MyBatis插入时获取自增主键方法

    MyBatis 3.2.6插入时候获取自增主键方法有两种,下面以以MySQL5.5为例通过两种方法给大家介绍mybatis获取自增主键的方法,一起看看吧
    2016-11-11
  • 基于Java中的数值和集合详解

    基于Java中的数值和集合详解

    下面小编就为大家带来一篇基于Java中的数值和集合详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • java、springboot 接口导出txt方式

    java、springboot 接口导出txt方式

    这篇文章主要介绍了java、springboot 接口导出txt方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Spring Boot 项目搭建教程及注解

    Spring Boot 项目搭建教程及注解

    下面小编就为大家带来一篇Spring Boot 项目搭建教程及注解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 基于spring security实现登录注销功能过程解析

    基于spring security实现登录注销功能过程解析

    这篇文章主要介绍了基于spring security实现登录注销功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • SpringMVC获取请求参数和域对象共享数据的示例代码

    SpringMVC获取请求参数和域对象共享数据的示例代码

    这篇文章主要给大家介绍了SpringMVC获取请求参数和域对象共享数据的示例代码,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-12-12
  • Mybatis-Plus和Mybatis的区别详解

    Mybatis-Plus和Mybatis的区别详解

    这篇文章主要介绍了Mybatis-Plus和Mybatis的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论