鍍金池/ 教程/ Java/ Java傳輸對(duì)象模式
Java前端控制器模式
Java工廠設(shè)計(jì)模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對(duì)象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計(jì)模式
Java空對(duì)象模式
Java數(shù)據(jù)訪問對(duì)象模式
Java訪問者模式
Java組合實(shí)體模式
Java服務(wù)定位器模式

Java傳輸對(duì)象模式

當(dāng)我們想要在客戶端到服務(wù)器的一個(gè)傳遞具有多個(gè)屬性的數(shù)據(jù)時(shí),可使用傳輸對(duì)象模式。傳輸對(duì)象也稱為值對(duì)象。傳輸對(duì)象是一個(gè)具有g(shù)etter/setter方法的簡(jiǎn)單POJO類,并且是可序列化的,因此可以通過網(wǎng)絡(luò)傳輸。 它沒有任何行為。服務(wù)器端業(yè)務(wù)類通常從數(shù)據(jù)庫獲取數(shù)據(jù)并填充到POJO類,并將其發(fā)送到客戶端或通過值傳遞它。對(duì)于客戶端,傳輸對(duì)象是只讀的。 客戶端可以創(chuàng)建自己的傳輸對(duì)象,并將其傳遞給服務(wù)器,以便一次性更新數(shù)據(jù)庫中的值。 以下是這種類型的設(shè)計(jì)模式的實(shí)體。

  • 業(yè)務(wù)對(duì)象 - 業(yè)務(wù)服務(wù)使用數(shù)據(jù)填充傳輸對(duì)象。
  • 傳輸對(duì)象 - 具有僅設(shè)置/獲取屬性的方法的簡(jiǎn)單POJO。
  • 客戶端 - 客戶端請(qǐng)求或發(fā)送傳輸對(duì)象到業(yè)務(wù)對(duì)象。

實(shí)現(xiàn)實(shí)例

在這個(gè)實(shí)現(xiàn)實(shí)例中,將創(chuàng)建一個(gè)StudentBO作為業(yè)務(wù)對(duì)象,Student作為傳輸對(duì)象表示實(shí)體。

TransferObjectPatternDemo是一個(gè)演示類,在這里充當(dāng)客戶端,將使用StudentBO和Student演示傳輸對(duì)象設(shè)計(jì)模式。

服務(wù)定位器模式示例的結(jié)構(gòu)如下圖所示 -

第1步

創(chuàng)建一個(gè)傳輸對(duì)象,其代碼如下所示 -

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步

創(chuàng)建一個(gè)業(yè)務(wù)對(duì)象,其代碼如下所示 -
StudentBO.java

import java.util.ArrayList;
import java.util.List;

public class StudentBO {

   //list is working as a database
   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");
   }

   //retrive list of students from the 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演示傳輸對(duì)象設(shè)計(jì)模式,其代碼如下所示 -
TransferObjectPatternDemo.java

public class TransferObjectPatternDemo {
   public static void main(String[] args) {
      StudentBO studentBusinessObject = new StudentBO();

      //print all students
      for (StudentVO student : studentBusinessObject.getAllStudents()) {
         System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
      }

      //update student
      StudentVO student = studentBusinessObject.getAllStudents().get(0);
      student.setName("Michael");
      studentBusinessObject.updateStudent(student);

      //get the student
      student = studentBusinessObject.getStudent(0);
      System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
   }
}

第4步

驗(yàn)證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]
Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]