设计模式3——值对象
★ 场景和问题
在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,
---也要获取方法的返回值,该如何能更好的进行数据的交互?
★ 基本的编写步骤
◎第1步:写一个类,实现可序列化(如果以后数据是往数据库里存的,那么可以不序列化,节省资源)
◎第2步:私有化所有属性,保持一个默认构造方法(public无参)
◎第3步:为每个属性提供get()、set()方法(如果是boolean型变量,最好把get改成is)
◎第4步:推荐覆盖实现equals()、hashCode()和toString()方法
值对象的本质是“封装数据”,一般用于网络。
Java代码解释:
package cn.hncu.patterns.exercise.vo;
/*
* 试用场景:
* 进行网络数据传输时。
* 例如使用函数返回传参,
* 这是函数也需要接参;
* 那么就用到值对象模式了,
* 将数据包装成一个整体,
* 接收一个整体,返回一个整体,
* 那么数据传输时就快捷一些了
* (相比于函数传输基本数据类型,
* 在网络上数据传输速度没有本机内存访问速度快)。
*/
public class VOTest {
/*
* 用户需要传输一个字符串
*/
public String t1(String name) {
return name;
}
/*
* 服务器想要添加一个数据age,
* 这里不建议全部连成字符串。
* 那么这时数据传输就会出问题。
*/
public String t2(String name, int age) {
return name;
}
/*
* 值对象模式
*/
public Data t3(Data d) {
return d;
}
public static void main(String[] args) {
}
}
package cn.hncu.patterns.exercise.vo;
import java.io.Serializable;
public class Data implements Serializable {
private static final long serialVersionUID = 1L;
private String name, telephone;
private boolean isAlive;
public Data(){
}
public Data(String name, String telephone, boolean isAlive) {
this.name = name;
this.telephone = telephone;
this.isAlive = isAlive;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public boolean isAlive() {
return isAlive;
}
public void setAlive(boolean isAlive) {
this.isAlive = isAlive;
}
@Override
public String toString() {
return "Data [name=" + name + ", telephone=" + telephone + ", isAlive="
+ isAlive + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (isAlive ? 1231 : 1237);
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result
+ ((telephone == null) ? 0 : telephone.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;
Data other = (Data) obj;
if (isAlive != other.isAlive)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (telephone == null) {
if (other.telephone != null)
return false;
} else if (!telephone.equals(other.telephone))
return false;
return true;
}
}