java 中设计模式(值对象)的实例详解

应用场景:在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?这个时候就需要用到我们的值对象设计模式

值对象的本质是“封装数据

具体步骤:

1. 所写的类必须实现序列化Serializable(序列化是为了防止数据读取的时候数据丢失)。 同时主要这个类的命名规范。值对象的命名规范: XxxValueObject, XxxVO, XxxModel。

2. 必须要写一个成员变量Id作为主键。(这个很好理解,你传入的数据姓名啊,地址或者其他可以相同,但是一定要有一个Id作为主键,来区分不同数据)

3. 必须要写一个空参的构造函数。

空参构造函数可以用来收集部分数据以及不同地方的数据(比方说你在这个页面用户只填写了姓名和性别信息,在其他地方收集到地址信息,空参很好的收集起来)

4. 写所有成员变量的set-get方法。用来收集和处理数据。为每个属性提供get()、set()方法(如果是boolean型变量,最好把get改成is)

5. 推荐覆盖实现equals()、hashCode()和toString()方法

具体实现代码(以传递个人地址数据为例)

import java.io.Serializable;

//值对象的命名规范: XxxValueObject, XxxVO, XxxModel

//1实现序列化接口

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 必须要有一个默认的空参构造

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

}

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java 值对象_java 中设计模式(值对象)的实例详解相关推荐

  1. java显示参数,Java中的隐式参数和显示参数实例详解

    在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...

  2. java生成字符串数组_Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...

  3. java.exe 安装程序_java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格 ...

  4. java list 重复数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  5. java 找出重复的数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个list集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  6. java ognl表达式 与struts2标签_Struts2 OGNL表达式实例详解

    Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 例1: struts.xml: /ognl.jsp OgnlAction1.java: pac ...

  7. java的websocket_java 实现websocket的两种方式实例详解

    一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  8. Java23中设计模式(Design Patterns)详解

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...

  9. java htmlparser 代理_Java解析HTML之HTMLParser使用与详解

    转自:http://free0007.iteye.com/blog/1131163 HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要 ...

最新文章

  1. Dungeon Master(三维bfs)java
  2. Mysql存储时间字段
  3. magisk下载里显示没有模块_重大更新 | 仓耳云黑大字库amp;模块版本更新!
  4. 巧用TreeSet求解第k小整数(洛谷P1138题题解,Java语言描述)
  5. java maven module_java – Maven JDK9模块:无法解析module-info
  6. 【数学建模】长方形椅子在不平地面上能否放稳
  7. 2016计算机知识点,2016年计算机一级考试知识点
  8. ISA 2004 Site-To-Site ×××截图详解
  9. LINUX下载编译vorbis
  10. 2016-05-25 margin-right jsp获取页面流变量 文字颜色
  11. 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (6)
  12. 微信公众号开发——java后台开发(一)
  13. Data Binding 详解(一)-从零开始
  14. Linux学习——linux网络配置、修改主机名、网络映射、远程连接工具XShell的使用(超详细)
  15. 中文模糊查找(C语言)+ 链表操作
  16. python Deformation Transfer for Triangle Meshes
  17. ue4子弹追踪与魔法子弹 逆向教程
  18. centos liunx升级内核
  19. 代表 YGG 的 Illuvium 首席游戏大使 —— Zom
  20. 利用四元数表示空间向量的旋转及代码示例

热门文章

  1. Id选择器和Class选择器
  2. Lazy loading
  3. asp.net创建文件夹出错的解决方案[转]
  4. 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...
  5. graphviz画图
  6. javascript格式化时间(几秒钟前,几分钟前,几小时前,几天前...)
  7. Java中的基本类型变量储存方式
  8. AJAX实现简单的注册页面异步请求
  9. Codeforces Round #303 (Div. 2) E. Paths and Trees 最短路+贪心
  10. angularJS学习笔记一