详解。。。设计模式3——值对象。。。studying

设计模式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) {
	}

}


//使用myeclipse软件可以自动生成函数
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;
	}

}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值