34-Java传输对象模式 ( Transfer Object Pattern )

news2024/9/22 23:19:54

Java传输对象模式

    • 实现
    • 范例

  • 传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据
  • 传输对象也被称为数值对象,没有任何行为
  • 传输对象是一个具有 getter/setter 方法的简单的 POJO 类,它是可序列化的,所以它可以通过网络传输
  • 服务器端的业务类通常从数据库读取数据,然后填充 POJO,并把它发送到客户端或按值传递它
  • 对于客户端,传输对象是只读的
  • 客户端可以创建自己的传输对象,并把它传递给服务器,以便一次性更新数据库中的数值
  • 以下是这种设计模式的实体:
    • 业务对象(Business Object) - 为传输对象填充数据的业务服务
    • 传输对象(Transfer Object) - 简单的 POJO,只有设置/获取属性的方法
    • 客户端(Client) - 客户端可以发送请求或者发送传输对象到业务对象

实现

在这里插入图片描述

  • 创建一个作为业务对象的 StudentBO 和作为传输对象的 StudentVO ,它们都代表了我们的实体
  • TransferObjectPatternDemo ,我们的演示类在这里是作为一个客户端,将使用 StudentBO 和 Student 来演示传输对象设计模式

范例

1. 创建传输对象 StudentVO

StudentVO.java

package com.demo.gof;
public class StudentVO{
   private String name;
   private int rollNo;

   StudentVO(String name, int rollNo){
      this.name = name;
      this.rollNo = rollNo;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getRollNo() {
      return rollNo;
   }

   public void setRollNo(int rollNo) {
      this.rollNo = rollNo;
   }
}

2. 创建业务对象 StudentBO

StudentBO.java

package com.demo.gof;
import java.util.ArrayList;
import java.util.List;

public class StudentBO {

   //列表是当作一个数据库
   List<StudentVO> students;

   public StudentBO(){
      students = new ArrayList<StudentVO>();
      StudentVO student1 = new StudentVO("Robert",0);
      StudentVO student2 = new StudentVO("John",1);
      students.add(student1);
      students.add(student2);       
   }
   public void deleteStudent(StudentVO student) {
      students.remove(student.getRollNo());
      System.out.println("Student: Roll No " 
      + student.getRollNo() +", deleted from database");
   }

   //从数据库中检索学生名单
   public List<StudentVO> getAllStudents() {
      return students;
   }

   public StudentVO getStudent(int rollNo) {
      return students.get(rollNo);
   }

   public void updateStudent(StudentVO student) {
      students.get(student.getRollNo()).setName(student.getName());
      System.out.println("Student: Roll No " 
      + student.getRollNo() +", updated in the database");
   }
}

3. 使用 StudentBO 来演示传输对象设计模式

TransferObjectPatternDemo.java

package com.demo.gof;
public class TransferObjectPatternDemo {
   public static void main(String[] args) {
      StudentBO studentBusinessObject = new StudentBO();

      //输出所有的学生
      for (StudentVO student : studentBusinessObject.getAllStudents()) {
         System.out.println("Student: [RollNo : "
         +student.getRollNo()+", Name : "+student.getName()+" ]");
      }

      //更新学生
      StudentVO student =studentBusinessObject.getAllStudents().get(0);
      student.setName("Michael");
      studentBusinessObject.updateStudent(student);

      //获取学生
      studentBusinessObject.getStudent(0);
      System.out.println("Student: [RollNo : "
      +student.getRollNo()+", Name : "+student.getName()+" ]");
   }
}

编译运行以上 Java 范例,输出结果如下

$ javac -d . src/main/com.demo/gof/TransferObjectPatternDemo.java
$ java  com.ddkk.demo.TransferObjectPatternDemo
Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]
Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]

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

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

相关文章

二分图

数据结构、算法总述&#xff1a;数据结构/算法 C/C-CSDN博客 二分图&#xff1a;节点由两个集合组成&#xff0c;且两个集合内部没有边的图。换言之&#xff0c;存在一种方案&#xff0c;将节点划分成满足以上性质的两个集合。 染色法 目的&#xff1a;验证给定的二分图是否可…

【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

mybatis plus intercept修改sql

原始需求 在SQL语句前面加上一个request-id 问题描述 今天收到业务同学反馈&#xff0c;说接入某个SDK后&#xff0c;request-id本地debug发现sql已经修改了&#xff0c;但打印的sql中却没有request-id信息 看了下代码&#xff0c;发现用户的代码其实就是下方 方案一代码&am…

【C++进阶】竞赛常用库函数

一、排序 sort简介 sort函数包含在头文件<algorithm>中。在使用前需要#include <algorithm>或使用万能头文件。sort是C标准库中的一个函数模板&#xff0c;用于对指定范围内的元素进行排序。sort算法使用的是快速排序(QuickSort)或者类似快速排序的改进算法&…

OCP NVME SSD规范解读-14.Firmware固件升级要求

4.11节 Firmware Update Requirements 描述了数据中心NVMe SSD固件更新的具体要求&#xff0c;确保固件升级过程既安全又可靠&#xff0c;同时充分考虑了设备在升级过程中的可用性和功能性。 FWUP-1: 设备必须记录每一次固件激活过程。这意味着固件升级过程中&#xff0c;设备会…

一文搞懂 YOLOv9 训练推理全流程 | YOLOv9你绝对不知道的细节!

文章地址&#xff1a;https://arxiv.org/pdf/2402.13616.pdf 代码地址&#xff1a;https://github.com/WongKinYiu/yolov9 前言 在这篇博客中&#xff0c;我们来聊聊 YOLOv9。首先&#xff0c;值得注意的一点是&#xff0c;YOLOv9的变化相对较小&#xff0c;它仍然基于YOLOv5的…

在线影院项目话术(0.7w精选)

项目介绍 这个电影院项目不同于常见的基于会员限制用户观看范围的在线影院项目&#xff0c;主要就是按需购买片源来进行观看&#xff0c;用户就不会因高额的会员费而劝退。 项目的主要实现就是&#xff1a;微服务的五大主键&#xff0c;数据库使用mysql,redis&#xff0c;中间…

2024年湖北荆门市工程系列职称评审开始啦

(一)中级测试对象&#xff1a;拟参加近两年度相关系列(专业)中级技术职务评审&#xff0c;且未取得中级水平能力测试合格证书的专业技术人员。 (二)初级测试对象&#xff1a;拟参加近两年度档案专业、工程系列助理级职称评审&#xff0c;且未取得初级水平能力测试合格证书的专业…

白酒:陈酿过程中的老熟度评价与品质提升方法

在豪迈白酒的酿造过程中&#xff0c;陈酿是一个至关重要的环节。陈酿不仅能使白酒老熟&#xff0c;提品质&#xff0c;还能发展出与众不同的风味和口感。云仓酒庄深知陈酿的重要性&#xff0c;并进行了深入的研究和实践。本文将探讨陈酿过程中的老熟度评价与品质提升方法。 首先…

蓝桥杯day7刷题日记

P8697 [蓝桥杯 2019 国 C] 最长子序列 思路&#xff1a;直接遍历&#xff0c;和子序列相同就记录&#xff0c;不然就下一位 #include <iostream> #include <string> using namespace std; int res;int main() {string s,t;cin>>s>>t;int i0,j0;while…

IDEA 远程调试

1.什么是远程调试 Java提供了一个远程调试功能&#xff0c;支持设置断点及线程级的调试同时&#xff0c;不同的JVM通过接口的协议联系&#xff0c;本地的Java文件在远程JVM建立联系和通信。 2.服务端开启远程调试 开启远程调试功能&#xff0c;需要修改tomcat 的catalina.sh…

目录框架【欢迎订阅收藏】

前端篇 第一章vue.js 1.Vue.js入门及环境搭建 2.vue.js基础知识 3.Vue.js自定义组件 Vue.js路由 5.Vue.js状态管理 6.网络通信axios 第二章Tailwindcss 1.tailwindcss介绍及引入 2.基础样式 3.组件样式 4.工具样式 第三章Nuxt 1.nuxt介绍及环境搭建 2.nuxt 目录结构 3.nuxt …

ElasticSearch文档批量操作[ES系列] - 第503篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

超声波清洗机怎么选?过来人推荐四大表现突出的宝藏眼镜清洗机!

如果你清洁眼镜的时候总是习惯用纸巾或者是衣服擦的话&#xff0c;我劝你要赶紧把这个坏习惯给改掉&#xff01;很多不知道原因的朋友会问&#xff0c;为什么不能用纸巾擦眼镜&#xff1f;其实是因为纸巾还有衣服布料上&#xff0c;存在一些比较粗糙的微粒&#xff0c;人体手部…

车载测试 HIL测试详解

HIL测试&#xff1a;即硬件在环测试&#xff0c;是一种广泛应用于汽车电子控制系统领域的测试方法。它将实际的硬件&#xff08;如ECU、传感器、执行器等&#xff09;与模拟器件&#xff08;如模型、仿真器等&#xff09;通过接口连接起来&#xff0c;模拟实际的操作环境&#…

动态规划-----最长公共子序列(及其衍生问题)

目录 一.最长公共子序列的基本概念&#xff1a; 解决动态规划问题的一般思路&#xff08;三大步骤&#xff09;&#xff1a; 二.最长公共子序列题目&#xff1a; 三.字符串的删除操作&#xff1a; 四.最小 ASCII 删除和&#xff1a; 一.最长公共子序列的基本概念&#xff…

微前端——qiankun

一、微前端 微前端是指存在于浏览器中的微服务&#xff0c;其借鉴了后端微服务的架构理念&#xff0c;将微服务的概念扩展到前端。即将一个大型的前端应用拆分为成多个模块&#xff0c;每个微前端模块可以有不同的团队开发并进行管理&#xff0c;且可以自主选择框架&#xff0…

seata测试demo(订单)

seata工作流程: seata对分布式事务的协调和控制就是31 1>XID&#xff1a;XID是全局事务的唯一标识&#xff0c;它可以在服务的调用链路中传递&#xff0c;绑定到服务的事务上下文中。 3>TC->TM->RM TC:事务协调器>就是seata 负责维护全局事务和分支事务的状…

选项式API和组合式API的区别

选项式(options) API 和组合式(composition) API两种不同的风格书写&#xff0c;Vue3 的组件可以使用这两种api来编写。 选项式API和组合式API的区别 选项式API 选项式 API&#xff0c;具有相同功能的放在一起&#xff0c;可以用包含多个选项的对象来描述组件的逻辑&…

【周总结】

周总结 完成项目混合版时区改造 完成相关jira问题的修改 完成老版本APP数据保存接口的兼容&#xff0c;手动赋值时区 2024/03/24 天气阴 一点不冷 1.Its time to go、Spring is coming&#xff01; 2. Its a nice day that staying with friends in a peaceful …