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

来源:互联网 发布:广告任务平台 源码 php 编辑:程序博客网 时间:2024/05/02 21:26

设计模式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;}@Overridepublic String toString() {return "Data [name=" + name + ", telephone=" + telephone + ", isAlive="+ isAlive + "]";}@Overridepublic 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;}@Overridepublic 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;}}











0 0
原创粉丝点击