Java設計模式
Java工廠設計模式
Java抽象工廠模式
Java單例模式
Java建造者(Builder)模式
Java原型模式
Java適配器模式
Java橋接模式
Java過濾器模式(條件模式)
Java組合模式
Java裝飾模式
Java門面模式(或外觀模式)
Java享元模式(Flyweight Pattern)
Java責任鏈模式
Java命令模式
Java迭代器模式
Java中介者模式(Mediator Pattern)
Java解釋器模式
Java備忘錄模式
Java觀察者模式
Java狀態模式
Java空對象模式
Java策略模式
Java模板模式
Java訪問者模式
Java MVC模式
Java業務代理模式
Java組合實體模式
Java數據訪問對象模式
Java前端控制器模式
Java攔截過濾器模式
Java服務定位器模式
Java傳輸對象模式
Java傳輸對象模式
當我們想要在客戶端到服務器的一個傳遞具有多個屬性的數據時,可使用傳輸對象模式。傳輸對象也稱爲值對象。傳輸對象是一個具有getter/setter方法的簡單POJO類,並且是可序列化的,因此可以通過網絡傳輸。 它沒有任何行爲。服務器端業務類通常從數據庫獲取數據並填充到POJO類,並將其發送到客戶端或通過值傳遞它。對於客戶端,傳輸對象是隻讀的。 客戶端可以創建自己的傳輸對象,並將其傳遞給服務器,以便一次性更新數據庫中的值。 以下是這種類型的設計模式的實體。
- 業務對象 - 業務服務使用數據填充傳輸對象。
- 傳輸對象 - 具有僅設置/獲取屬性的方法的簡單POJO。
- 客戶端 - 客戶端請求或發送傳輸對象到業務對象。
實現實例
在這個實現實例中,將創建一個StudentBO作爲業務對象,Student作爲傳輸對象表示實體。
TransferObjectPatternDemo是一個演示類,在這裏充當客戶端,將使用StudentBO和Student演示傳輸對象設計模式。
服務定位器模式示例的結構如下圖所示 -
第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 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演示傳輸對象設計模式,其代碼如下所示 -
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步
驗證輸出,執行上面的代碼得到以下結果 -
Student: \[RollNo : 0, Name : Robert \]
Student: \[RollNo : 1, Name : John \]
Student: Roll No 0, updated in the database
Student: \[RollNo : 0, Name : Michael \]