>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21957 个阅读者 刷新本主题
 * 贴子主题:  Java设计模式:传输对象模式 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-30 17:14:08     消息  查看  搜索  好友  邮件  复制  引用

  

传输对象模式

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

实现

我们将创建一个作为业务对象的 StudentBO 和作为传输对象的 StudentVO,它们都代表了我们的实体。

   TransferObjectPatternDemo,我们的演示类在这里是作为一个客户端,将使用 StudentBO 和  Student 来演示传输对象设计模式。

    点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

步骤 1

     创建传输对象。

StudentVO.java

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.java

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

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 ( ) + "  ] " ) ;
    }
}

步骤 4

执行程序,输出结果:

Student: [RollNo : 0, Name : Robert ]

Student: [RollNo : 1, Name : John ]

Student: Roll No 0, updated in the database

Student: [RollNo : 0, Name : Michael ]





程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-01-31 15:37:52 重新编辑]
  Java面向对象编程-->第一个Java程序
  JavaWeb开发-->Servlet技术详解(Ⅱ)
  JSP与Hibernate开发-->使用JPA和注解
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->Vue简介
  Vue3开发-->Vue组件开发基础
  [分享]遊藝場開分員會很難嗎?原來工作項目是這些!
  快速理解 函数式编程,响应式编程,链式编程
  孙卫琴的视频课程的源代码下载
  NIO底层原理
  整理收集的一些常用java工具类
  搞定这24道JVM面试题,要价30k都有底气
  JDK自带JVM调优工具的用法
  Java 语言中十大“坑爹”功能!
  面试问我,创建多少个线程合适?我该怎么说
  HashMap中 get 和 put 操作的具体过程
  Synchronized与ReentrantLock区别总结
  Eclipse使用指南:创建Java项目的步骤
  正则表达式:运算符优先级
  Java入门实用代码:获取链表(LinkedList)的第一个和最后一...
  jdbc连接各种数据库代码
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。