java 中設(shè)計模式(值對象)的實例詳解
java 中設(shè)計模式(值對象)的實例詳解
應(yīng)用場景:在Java開發(fā)時,需要來回交換大量的數(shù)據(jù),比如要為方法傳入?yún)?shù),也要獲取方法的返回值,該如何能更好的進行數(shù)據(jù)的交互?這個時候就需要用到我們的值對象設(shè)計模式
值對象的本質(zhì)是“封裝數(shù)據(jù)
具體步驟:
1. 所寫的類必須實現(xiàn)序列化Serializable(序列化是為了防止數(shù)據(jù)讀取的時候數(shù)據(jù)丟失)。 同時主要這個類的命名規(guī)范。值對象的命名規(guī)范: XxxValueObject, XxxVO, XxxModel。
2. 必須要寫一個成員變量Id作為主鍵。(這個很好理解,你傳入的數(shù)據(jù)姓名啊,地址或者其他可以相同,但是一定要有一個Id作為主鍵,來區(qū)分不同數(shù)據(jù))
3. 必須要寫一個空參的構(gòu)造函數(shù)。
空參構(gòu)造函數(shù)可以用來收集部分?jǐn)?shù)據(jù)以及不同地方的數(shù)據(jù)(比方說你在這個頁面用戶只填寫了姓名和性別信息,在其他地方收集到地址信息,空參很好的收集起來)
4. 寫所有成員變量的set-get方法。用來收集和處理數(shù)據(jù)。為每個屬性提供get()、set()方法(如果是boolean型變量,最好把get改成is)
5. 推薦覆蓋實現(xiàn)equals()、hashCode()和toString()方法
具體實現(xiàn)代碼(以傳遞個人地址數(shù)據(jù)為例)
import java.io.Serializable; //值對象的命名規(guī)范: XxxValueObject, XxxVO, XxxModel //1實現(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碰到這種情況會有bug) private String address; // 3 必須要有一個默認(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這幾個方法 @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ū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Elasticsearch索引結(jié)構(gòu)與算法解析
?作為搜索引擎的一部分,ES自然具有速度快、結(jié)果準(zhǔn)確、結(jié)果豐富等特點,那么ES是如何達到“搜索引擎”級別的查詢效率呢?首先是索引,其次是壓縮算法,接下來我們就一起了解下ES的索引結(jié)構(gòu)和壓縮算法2023-04-04Java使用Jedis操作Redis服務(wù)器的實例代碼
本篇文章主要介紹了Java使用Jedis操作Redis服務(wù)器的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08maven tomcat plugin實現(xiàn)熱部署
這篇文章主要介紹了maven tomcat plugin實現(xiàn)熱部署,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Spring MVC數(shù)據(jù)綁定概述及原理詳解
這篇文章主要介紹了Spring MVC數(shù)據(jù)綁定概述及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06