一文了解编程领域的模版

news2024/10/7 6:45:26

文章目录

  • 模版含义
  • 代码模版
  • 泛型
  • 模版引擎
  • 小结

       🍊在编程领域,模板是一种代码片段,它可以被重复使用,并允许您在保持代码的基本结构不变的情况下,根据需要调整其中的内容。模板通常在构建大型程序或开发一类相关程序时非常有用,以减少代码冗余并提高代码可读性。

       🍊模板可以通过多种方式实现,具体取决于使用的编程语言。在 C++ 中,可以使用模板来实现泛型编程。在 Java 中,可以使用泛型来实现类似模板的功能。此外,许多编程语言都提供了模板引擎,可以生成静态 HTML 或动态网页。

模版含义

在编程领域中,模板可以有多种含义。以下是最常见的几种:

  1. 代码模板:代码模板是一段可以重复使用的代码片段。它通常用于生成大量相似的代码,从而减少代码冗余并提高代码的可读性。
  2. 泛型:泛型是指在一个类、接口或函数的定义中使用泛型,以提供对多种类型的支持。泛型模板可以在编译时为不同类型生成不同的代码版本,从而提供灵活的代码表示。
  3. 模板引擎:模板引擎是一种生成静态 HTML 或动态网页的工具。它通常使用特定的语法,将数据与模板中的代码结合,以生成最终的网页。

       模板的使用与实现方式因编程语言而异,但所有编程语言都提供了某种形式的模板来支持代码的重复使用和灵活性。

代码模版

       代码模板是指在编程过程中,预先编写好的一份代码,并通过一些技巧,将其中的特定部分替换为需要的信息,从而快速生成符合需求的代码。

       代码模板常用于节省编写重复代码的时间,以及保证代码质量和一致性。

以 Java 为例,下面是一个简单的代码模板文件(Template.txt):

public class ${ClassName} {
    public ${ReturnType} ${MethodName}(${Parameters} ) {
        // 业务逻辑code
        ${generalEditorCode}
    }
}

在这里插入图片描述

可以通过以下步骤使用此模板:

  1. 将模板代码复制到一个文件中,例如Template.txt。
  2. 读取模版文件。
  3. 将模板中的占位符替换为具体的值,如ClassName、ReturnType、MethodName和Parameters。
  4. 保存到新文件中(如MyApplication.java)。

        根据需要,在代码中对方法进行修改和扩展。

以下代码来实现读取模板并根据模板生成代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class GenerateCode {
    public static void main(String[] args) throws IOException {
    	public class GenerateCode {
    public static void main(String[] args) throws IOException {
        //替换模版的信息(根据需要,玩转模版)
        String className = "MyApplication";
        String returnType = "void";
        String methodName = "myMethod";
        String parameters = "int a, String b";
        String generalEditorCode = "System.out.println(a + b);";

        // 读取模板
        BufferedReader br = new BufferedReader(new FileReader("./file/Template.txt"));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line).append("\n");
        }
        br.close();

        // 替换模版中占位符
        String template = sb.toString();
        template = template.replace("${ClassName}", className);
        template = template.replace("${ReturnType}", returnType);
        template = template.replace("${MethodName}", methodName);
        template = template.replace("${Parameters}", parameters);
        template = template.replace("${GeneralEditorCode}", generalEditorCode);

        // 写入新文件
        FileWriter fw = new FileWriter("./file/" + className + ".java");
        fw.write(template);
        fw.close();
    }
}
    }
}

        以我的视角为例,运行代码后会生成一个新的.java文件

在这里插入图片描述

泛型

下面是一个简单的泛型类,它可以存储任意类型的数据:

public class Box<T> {
   private T t;

   public void add(T t) {
      this.t = t;
   }

   public T get() {
      return t;
   }
}

public class Main {
   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<String> stringBox = new Box<String>();

      integerBox.add(10);
      stringBox.add("Hello World");

      System.out.println("Integer Value : " + integerBox.get());
      System.out.println("String Value : " + stringBox.get());
   }
}

       在这个例子中,我们定义了一个名为 Box 的泛型类,并使用了 add 和 get 方法在其中存储和检索值。在创建 Box 对象时,您可以在括号中指定数据类型,如 Integer 或 String。

模版引擎

       模板引擎是一种生成动态内容的工具,常用于 Web 开发中。模板引擎允许用户创建一个静态的 HTML 页面,其中一些内容是可以动态生成的。通过在 HTML 模板中插入占位符,引擎可以根据需要在运行时自动替换为实际的内容。

以下是 Java 中使用 FreeMarker 作为模板引擎的示例代码:

  1. 创建 pom.xml,添加 FreeMarker 依赖
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>
  1. Java代码实现
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

/**
* @author 
* @date 2023年02月03日 14:43
*/
public class TemplatEengine {
   public static void main(String[] args) {
       // 定义模板(模版可以存在文件系统、DB或者云端存储等)
       String template = "<html>\n" +
               "    <head>\n" +
               "        <title>${title}</title>\n" +
               "    </head>\n" +
               "    <body>\n" +
               "        <h1>${header}</h1>\n" +
               "        <p>${message}</p>\n" +
               "    </body>\n" +
               "</html>";

       // 创建模板配置
       Configuration configuration = new Configuration();

       // 将模板数据存入数据模型
       Map<String, Object> dataModel = new HashMap<>();
       dataModel.put("title", "My Page");
       dataModel.put("header", "Welcome");
       dataModel.put("message", "Hello, World!");

       // 生成模板
       StringWriter writer = new StringWriter();
       try {
           Template t = new Template("template", new StringReader(template), configuration);
           t.process(dataModel, writer);
           System.out.println(writer.toString());
       } catch (TemplateException | IOException e) {
           e.printStackTrace();
       }
   }

}

       该代码创建了一个简单的 HTML 模板,其中包含三个占位符: t i t l e 、 {title}、 title{header} 和 ${message}。接下来,代码将数据模型存入数据字典,然后使用 FreeMarker 模板引擎生成最终的 HTML。

运行结果

在这里插入图片描述

小结

       在编程领域的一些场景下,模板是作为特定类型项目或任务的起点的蓝图或表单。在编程环境中,模板通常用于生成可针对特定用例进行定制的可重用代码。

       有几种类型的模板,包括代码模板、通用模板和模板引擎。代码模板为一段代码提供了一个基本结构,可以用作起点,而通用模板允许创建可以处理一系列数据类型的灵活代码。模板引擎是一种更高级的模板形式,允许创建和呈现动态 HTML 模板。

       总的来说,这些模版都可以提高效率,减少重复的工作量,可以给研发提供额外的时间来关注其他事情,如稳定性、代码优化、重构等。⚠️但是,了解使用模板的限制和权衡很重要,因为模板也可能会增加代码的复杂性并使其更难调试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Arthas的学习与使用

一、简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c…

Maven知识点-反应堆

前言 在一个多模块的Maven项目中&#xff0c;反应堆&#xff08;Reactor&#xff09;是指所有模块组成的一个构建结构。对于单模块的项目&#xff0c;反应堆就是该模块本身&#xff1b;但是对于多模块项目来说&#xff0c;反应堆就包含了各模块之间继承和依赖的关系&#xff0…

一篇带你MySQL入门

文章目录1. MySQL概述1.1 数据库相关概念1.2 MySQL数据库1.2.1 版本1.2.2 下载1.2.3 数据模型2. SQL2.1 SQL通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作2.4 图形化界面工具2.4.1 安装2.4.2 使用2.5 DML2.5.1 添加数据2.5.2 修改数据2.5.3 删除数据2.6 DQL2.6.1 基…

每天一道大厂SQL题【Day04】大数据排序统计

每天一道大厂SQL题【Day04】大数据排序统计 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#x…

酒店管理|基于Springboot+Vue前后端分离实现酒店管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

webpack5从入门到精通

前言 webpack是什么&#xff1f; 摘自官网的一段话&#xff1a;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每…

[oeasy]python0072_修改字体前景颜色_foreground_color_font

修改颜色 回忆上次内容 m 可以改变字体样式 0-9 之间设置的都是字体效果0 重置为默认1 变亮2 变暗3 斜体4 下划线5 慢闪6 快闪7 前景背景互换8 隐藏9 中划线 叠加效果 \33[1;3moeasy;分割 取消效果 21 取消 122 取消 223 取消 3一直到 290 是全部取消&#xff0c;回到默认 最…

静态链接库与动态链接库

静态链接库与动态链接库的区别 静态链接库&#xff1a;在项目中引用了库函数&#xff0c;编译时链接器会将引用的函数代码或变量&#xff0c;链接到可执行文件里&#xff0c;和可执行程序组装在一起 动态链接库&#xff1a;在编译阶段不参与链接&#xff0c;不会和可执行文件…

【Unity】流式播放远端音频:WAV格式音频篇(一)

先了解一下wav的格式&#xff1a; 参考1&#xff1a;【音频】WAV 格式详解_tyustli的博客-CSDN博客_wav文件格式详解wav 文件支持多种不同的比特率、采样率、多声道音频。WAV 文件格式是 Microsoft 的 RIFF 规范的一个子集&#xff0c;用于存储多媒体文件。RIFF&#xff08;res…

git-secret:在 Git 存储库中加密和存储密钥(上)

目前市面上已经存在许多较为成熟的密钥管理产品&#xff0c;比如 HashiCorp Vault&#xff0c;AWS Secrets Manager 以及 GCP Secret Manager。由于这些产品需要集成和维护等服务&#xff0c;因此在项目中引入会增加一定成本和开销。阅读本文&#xff0c;将带你了解如何在 Dock…

numpy数值差分

文章目录diffediff1ddiff diff是numpy中用于求差分的函数&#xff0c;函数定义为 diff(a, n1, axis-1, prepend<no value>, append<no value>)其中a为数组&#xff0c;n为差分的阶数&#xff0c;axis为求导对应的坐标轴&#xff0c;默认-1表示最后一个轴。 例如…

提分必练,中创教育PMP全真模拟题分享

湖南中创教育每日五题分享来啦&#xff0c;“日日行&#xff0c;不怕千万里&#xff1b;常常做&#xff0c;不怕千万事。”&#xff0c;每日五题我们练起来&#xff01; 1、一个建筑项目所在的地区即将进入台风季节&#xff0c;恶劣的天气会严重影响项目的进度。高层管理者要求…

Java poi之word文本替换

目录结构前言文档准备引入Maven依赖代码块替换结果验证孤勇者替换结果对比青鸟替换结果对比前言 应公司需求&#xff0c;需实现以下功能 word文本内容的替换&#xff1b;word文本内容的提取&#xff1b;word文档中图片的提取存放 此文章将使用Apache POI实现Word文档中文本内…

【C++】揭开“引用”的庐山真面目

目录 一、引用的概念 二、引用的应用 1.特性 2.使用场景 2.1 引用作为函数参数 2.2 引用作为函数返回值 三、引用的权限问题 四、引用和指针的区别 一、引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟…

【数据结构之二叉树简介·顺序存储·应用:堆·堆排序·TOPK问题】

​ &#x1f57a;作者&#xff1a; 迷茫的启明星 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f383;相关文章 【数据结构从0到1之树的初识】 &#x1f3c7;家人们&#xff0c;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64…

Kotlin SharedFlowStateFlow 热流到底有多热?

前言 协程系列文章&#xff1a; 一个小故事讲明白进程、线程、Kotlin 协程到底啥关系&#xff1f;少年&#xff0c;你可知 Kotlin 协程最初的样子&#xff1f;讲真&#xff0c;Kotlin 协程的挂起/恢复没那么神秘(故事篇)讲真&#xff0c;Kotlin 协程的挂起/恢复没那么神秘(原理…

50条必背JAVA知识点(二)

16.强制类型转换&#xff1a;将容量大的数据类型转换为容量小的数据类型&#xff0c;但可能造成精度降低或溢出。 17.字符串不能直接转换为基本类型&#xff0c;但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 18.计算机底层都以二进制补码的方式来存储数据。…

将现实问题转换为编程问题

将现实问题转换为编程问题需要转换思维&#xff0c;不过孰能生巧&#xff0c;见多了就自然懂如何做了&#xff0c;所以动起手来是决没错的。1.猜名次问题改进一&#xff1a;改进二&#xff1a;改进三&#xff1a;2.猜凶手问题总结&#xff1a;1.猜名次问题 每个选手都说了两句话…

深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

Nginx再次回顾 也许你已经忘记了Nginx是做什么的&#xff1f;我来再次给你夯实一下概念。 多协议反向代理 Nginx是个高性能的Web和反向代理服务器及HTTP服务器&#xff0c;它能反向代理HTTP&#xff0c;HTTPS和邮件相关(SMTP&#xff0c;POP3&#xff0c;IMAP)的协议链接&am…

四十、Kubernetes1.25中安全认证详解

1、访问控制概述Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。客户端在Kubernetes集群中&#xff0c;客户端通常有两类&#xff1a;User Account&#xff1a…