1、概述
前文说明了一些基本的概念和设计思路,从UML图中可以看出很多的内容,比如类关系,组件关系,下文将要使用JAVA实现第一部分的设计。
2、实现TransFormData
|
/* * Created on 2004-7-21 by Jem.Lee * * TransFormData is a part of cn.bs.common.transdata * ALL RIGHTS RESERVED. * COPYRIGHT (C) 2004. Jem.Lee */
/* 包路径cn.bs.common.transdata*/ package cn.bs.common.transdata;
/*Import包内容*/ import java.util.HashMap; import java.util.Iterator;
/** * <PRE> * History * 2004-7-21 21:02:57 created by Jem.Lee * * 目的 * 作为视图和控制器之间进行数据传递的主要对象, * 它包涵一般的元素对象和Table对象 * </PRE> */ public class TransFormData implements Cloneable{
/* * 存放单个元素的Hash表 */ private HashMap trselements = new HashMap(); /* * 存放Table元素的的Hash表 */ private HashMap trstables = new HashMap();
/** * <PRE> * 从FormData获得指定元素名称的值 * @param name 元素名称 * @return 元素对应的值 * @throws Exception * </PRE> */ public String getFieldValue(String name) throws Exception { return(this.getFieldFromName(name).getValue()); }
/** * <PRE> * 从FormData获得指定元素域名称 * @param name 元素名称 * @return 元素对应的域 * @throws Exception * </PRE> */ public TransFormField getFieldFromName(String name) throws Exception { if (name == null) { throw (new NullPointerException("输入的域名为空或是null")); } TransFormField ret = (TransFormField) trselements.get(name); if (ret == null) { throw (new Exception("找不到对应'" + name + "'域名")); } return (ret); }
/** * <PRE> * 给FormData指定一个元素并设置它的值,如果发现该元素已经存在,则覆盖该元素。 * @param name 元素的名称 * @param value 元素的值 * </PRE> */ public void putFieldValueO(String name, String value){ TransFormField newElement = new TransFormField(name, value); newElement.setParent(this); this.putElementsO(newElement); }
/** * <PRE> * 设置FormData的Elevent域。 * @param newElement 指定的新域 * </PRE> */ public void putElementsO(TransFormField newElement){ newElement.setParent(this); this.trselements.put(newElement.getName(), newElement); }
/*------------------------------Table------------------*/
/** * <PRE> * 增加Table到FormData中,并返回该Table的实例,如果指定的表已经存在, * 则抛出Exception例外 * @param name Table的名称 * @return FormTable 所返回的Table类型 * @throws Exception * </PRE> */ public TransFormTable addTable(String name) throws Exception{ if(trstables.get(name) != null){ throw(new Exception()); } return(addTableO(name)); }
/** * <PRE> * 增加Table到FormData中,并返回该Table的实例,如果该指定的表已经存在, * 则强行覆盖新的表。 * @param name Table的名称 * @return FormTable 所返回的Table类型 * </PRE> */ public TransFormTable addTableO(String tableName){ TransFormTable newTable = new TransFormTable(tableName); newTable.setParent(this); trstables.put(tableName, newTable); return(newTable); }
/** * <PRE> * 对Table的内容进行排序 * </PRE> */ void sortTable(){ Iterator iTables = this.trstables.keySet().iterator(); while(iTables.hasNext()){ TransFormTable tbl = (TransFormTable) this.trstables.get(iTables.next()); tbl.sort(); } }
/** * <PRE> * 获得指定表名称的实例 * @param name 表名称 * @return 指定表名称的实例 * @throws BsComponentException、NullPointerException、IllegalArgumentException * </PRE> */ public TransFormTable getTable(String name) throws Exception { if (name == null) { throw (new NullPointerException("输入的表名是null")); } if (name.equals("")) { throw (new IllegalArgumentException("输入的域名为空")); } TransFormTable ret = (TransFormTable) trstables.get(name); if (ret == null) { throw (new Exception()); } return(ret); } }
|
3、实现TransFormField
|
/* * Created on 2004-7-21 by Jem.Lee * * TransFormField is a part of cn.bs.common.transdata * ALL RIGHTS RESERVED. * COPYRIGHT (C) 2004. Jem.Lee */
/* 包路径cn.bs.common.transdata*/ package cn.bs.common.transdata;
/** * <PRE> * History * 2004-7-21 21:03:26 created by Jem.Lee * * 目的 * 作为视图和控制器之间进行数据传递的主要对象, * 它作为一般的元素对象 * </PRE> */ public class TransFormField {
/* * 元素名称 */ private String name;
/* * 元素值 */ private String value;
/* * 存放该元素得父目录 */ private TransFormData parent;
/** * 构造函数 * @param initName 元素名称 * @param initValue 元素值 */ public TransFormField(String initName, String initValue) {
/*如果提供的元素名称为null则抛出NullPointerException例外*/ if (initName == null) throw (new NullPointerException("初始化FormField时提供的参数错误,比如其中initName为null"));
/*如果提供的元素名称为空则抛出IllegalArgumentException例外*/ if (initName.equals("")) throw (new IllegalArgumentException("初始化FormField时提供的参数错误,initName为空"));
/*如果提供的元素值为null则抛出NullPointerException例外*/ if (initValue == null) throw (new NullPointerException("初始化FormField时提供的参数错误,initValue为null"));
this.name = initName; this.value = initValue; } /** * <PRE> * 获得元素名称 * @return 元素名称 * </PRE> */ public String getName(){ return(this.name); }
/** * <PRE> * 获得元素的值 * @return 元素的值 * </PRE> */ public String getValue(){ return(this.value); }
/** * <PRE> * 设置元素的父目录 * @param newParent 父目录 * </PRE> */ public void setParent(TransFormData newParent){ /*如果父目录为null,则抛出NullPointerException例外*/ if(newParent == null) throw (new NullPointerException("设置FormField的包容类FormData错误,比如为null")); this.parent = newParent; }
}
|
4、实现TransFormRecord
|
/* * Created on 2004-7-21 by Jem.Lee * * TransFormRecord is a part of cn.bs.common.transdata * ALL RIGHTS RESERVED. * COPYRIGHT (C) 2004. Jem.Lee */
/* 包路径cn.bs.common.transdata*/ package cn.bs.common.transdata;
/** * <PRE> * History * 2004-7-21 21:03:44 created by Jem.Lee * * 目的 * 作为视图和控制器之间进行数据传递的主要对象, * 它作为Table对象的元素对象 * </PRE> */ public class TransFormRecord extends TransFormData implements Comparable{
/* * 记录 ID */ private int rec_Id;
/* * 存放该元素得父目录 */ private TransFormTable parent;
public int compareTo(Object target) { if(target instanceof TransFormRecord) return(rec_Id-((TransFormRecord)target).getRecId()); return(0); } /** * <PRE> * 设置元素的父目录 * @param newParent 父目录 * </PRE> */ void setParent(TransFormTable newParent){ parent = newParent; } /** * <PRE> * 获得元素的父目录 * @return FormTable 父目录 * </PRE> */ TransFormTable getParent(){ return(parent); }
/** * * <PRE> * 设置 新的记录ID * @param newId 记录ID * </PRE> */ void setRecId(int new_Id){ rec_Id = new_Id; }
/** * * <PRE> * 获得的记录ID * @return 记录ID * </PRE> */ int getRecId(){ return(rec_Id); } }
|
5、实现TransFormTable
|
/* * Created on 2004-7-21 by Jem.Lee * * FormTable.java is a part of cn.bs.common.transdata * ALL RIGHTS RESERVED. * COPYRIGHT (C) 2004. Jem.Lee */
/* 包路径cn.bs.common.transdata*/ package cn.bs.common.transdata;
/*Import包内容*/ import java.util.ArrayList; import java.util.Collections; import java.util.Iterator;
/** * <PRE> * History * 2004-7-21 21:04:00 created by Jem.Lee * * 目的 * 作为视图和控制器之间进行数据传递的主要对象, * 它作为FormData对象的元素对象 * </PRE> */ public class TransFormTable {
/* * Table 名称 */ private String name;
/* * 记录数组 */ private ArrayList records = new ArrayList();
/* * 存放该元素得父目录 */ private TransFormData parent;
/** * <PRE> * 构造函数 提供表名称 * @param initName 表名称 * </PRE> */ public TransFormTable(String initName) { /*如果提供的表名为null,则抛出NullPointerException例外*/ if (initName == null) throw (new NullPointerException("构造FormTable时错误,比如表名为null"));
/*如果提供的表名为空,则抛出NullPointerException例外*/ if (initName.equals("")) throw (new IllegalArgumentException("构造FormTable时错误,比如表名为空"));
this.name = initName; } /** * <PRE> * 设置元素的父目录 * @param newParent 父目录 * </PRE> */ void setParent(TransFormData newParent) throws NullPointerException { /*如果提供的父目录为null,则抛出NullPointerException例外*/ if (newParent == null) throw (new NullPointerException("设置ForFormTablemField的包容类FormData错误,比如为null"));
this.parent = newParent; } /** * * <PRE> * 加入一条记录到Table * @return 返回该条记录的实例,以便进行赋值操作 * </PRE> */ public TransFormData add() { TransFormRecord newRec = new TransFormRecord(); newRec.setParent(this); records.add(newRec); reIndex(); sort(); return (newRec); } /** * * <PRE> * 排序函数,对表的记录进行排序 * </PRE> */ void sort() { Collections.sort(records); Iterator iRecs = records.iterator(); while(iRecs.hasNext()){ TransFormData rec = (TransFormData) iRecs.next(); rec.sortTable(); } }
/** * * <PRE> * 记录索引 * </PRE> */ void reIndex() { int index = 0; //Collections.sort(recs); Iterator i = records.iterator(); while (i.hasNext()) { TransFormRecord rec = (TransFormRecord) i.next(); rec.setRecId(index); index++; } }
/** * * <PRE> * 通过记录号获得一条记录 * @param recNo 记录号 * @return 一条记录 * </PRE> */ public TransFormData get(int recNo) { return ((TransFormData) records.get(recNo)); }
/** * * <PRE> * 获得表的长度 * @return 表的长度 * </PRE> */ public int size() { return (records.size()); }
}
|
6、总结
到这里,我把H-DTO模式做了简要介绍,希望对你的设计有些帮助,如果发现错误之处还请批评指正,如果有疑问或是不明之处欢迎讨论。

前文介绍了基本概念和设计思路,可从UML图看出类关系、组件关系等内容。下文将用JAVA实现第一部分设计,包括实现TransFormData、Field、Record、Table等。最后对H-DTO模式做了简要介绍,欢迎交流。
686

被折叠的 条评论
为什么被折叠?



