java 中設(shè)計(jì)模式(值對(duì)象)的實(shí)例詳解
java 中設(shè)計(jì)模式(值對(duì)象)的實(shí)例詳解
應(yīng)用場景:在Java開發(fā)時(shí),需要來回交換大量的數(shù)據(jù),比如要為方法傳入?yún)?shù),也要獲取方法的返回值,該如何能更好的進(jìn)行數(shù)據(jù)的交互?這個(gè)時(shí)候就需要用到我們的值對(duì)象設(shè)計(jì)模式
值對(duì)象的本質(zhì)是“封裝數(shù)據(jù)
具體步驟:
1. 所寫的類必須實(shí)現(xiàn)序列化Serializable(序列化是為了防止數(shù)據(jù)讀取的時(shí)候數(shù)據(jù)丟失)。 同時(shí)主要這個(gè)類的命名規(guī)范。值對(duì)象的命名規(guī)范: XxxValueObject, XxxVO, XxxModel。
2. 必須要寫一個(gè)成員變量Id作為主鍵。(這個(gè)很好理解,你傳入的數(shù)據(jù)姓名啊,地址或者其他可以相同,但是一定要有一個(gè)Id作為主鍵,來區(qū)分不同數(shù)據(jù))
3. 必須要寫一個(gè)空參的構(gòu)造函數(shù)。
空參構(gòu)造函數(shù)可以用來收集部分?jǐn)?shù)據(jù)以及不同地方的數(shù)據(jù)(比方說你在這個(gè)頁面用戶只填寫了姓名和性別信息,在其他地方收集到地址信息,空參很好的收集起來)
4. 寫所有成員變量的set-get方法。用來收集和處理數(shù)據(jù)。為每個(gè)屬性提供get()、set()方法(如果是boolean型變量,最好把get改成is)
5. 推薦覆蓋實(shí)現(xiàn)equals()、hashCode()和toString()方法
具體實(shí)現(xiàn)代碼(以傳遞個(gè)人地址數(shù)據(jù)為例)
import java.io.Serializable;
//值對(duì)象的命名規(guī)范: XxxValueObject, XxxVO, XxxModel
//1實(shí)現(xiàn)序列化接口
public class AddressVO implements Serializable {
private static final long serialVersionUID = 1L;
// 2私有化所有成員變量
private String userId;
private String name;
private int age;
private boolean man; //變量名建議不要取成isMan(JSP碰到這種情況會(huì)有bug)
private String address;
// 3 必須要有一個(gè)默認(rèn)的空參構(gòu)造
public AddressVO() {
}
// 4 寫所有成員變量的setter-getter方法---boolean型變量的getter方法寫成isXXX()的形式
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMan() {
return man;
}
public void setMan(boolean man) {
this.man = man;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//5 建議寫equals,hashCode,toString這幾個(gè)方法
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userId == null) ? 0 : userId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AddressVO other = (AddressVO) obj;
if (userId == null) {
if (other.userId != null)
return false;
} else if (!userId.equals(other.userId))
return false;
return true;
}
@Override
public String toString() {
return "AddressVO [userId=" + userId + ", name=" + name + ", age="
+ age + ", man=" + man + ", address=" + address + "]";
}
}
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Spring的RedisTemplate存儲(chǔ)的key和value有特殊字符的處理
這篇文章主要介紹了Spring的RedisTemplate存儲(chǔ)的key和value有特殊字符的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Mybatis中TypeAliasRegistry的作用及使用方法
Mybatis中的TypeAliasRegistry是一個(gè)類型別名注冊(cè)表,它的作用是為Java類型建立別名,使得在Mybatis配置文件中可以使用別名來代替完整的Java類型名。使用TypeAliasRegistry可以簡化Mybatis配置文件的編寫,提高配置文件的可讀性和可維護(hù)性2023-05-05
如何使用MybatisPlus的SQL注入器提升批量插入性能
本文給大家介紹如何使用MybatisPlus的SQL注入器提升批量插入性能,以實(shí)戰(zhàn)視角講述如何利用該特性提升MybatisPlus?的批量插入性能,感興趣的朋友跟隨小編一起看看吧2024-05-05
Java使用字節(jié)流實(shí)現(xiàn)圖片音頻的復(fù)制
今天帶大家學(xué)習(xí)Java的相關(guān)知識(shí),文章圍繞著Java如何使用字節(jié)流實(shí)現(xiàn)圖片音頻的復(fù)制展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06
Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程
這篇文章主要介紹了Spring Security賬戶與密碼驗(yàn)證實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03
Spring Boot Rest控制器單元測(cè)試過程解析
這篇文章主要介紹了Spring Boot Rest控制器單元測(cè)試過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java concurrency之公平鎖(一)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency之公平鎖的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
淺談Spring Cloud Netflix-Ribbon灰度方案之Zuul網(wǎng)關(guān)灰度
這篇文章主要介紹了淺談Spring Cloud Netflix-Ribbon灰度方案之Zuul網(wǎng)關(guān)灰度,想了解Ribbon灰度的同學(xué)可以參考下2021-04-04

