你这样做只是把报文拆分成多个域,对于每种报文还得把每个域变成需要的数据和把数据变成域,每种报文写一次,测试会累死你。
class MessageFactory{
public Message newMessage(String type);//从流中读取报文头,得到报文类型,根据类型生成Message的子类。
}
class FieldFactory{
public Field getField(int index);//根据索引生成一个域,因为所有类型的报文的同一个域是完全一样的。
}
abstract class Message{
ArrayList fields=new ArrayList();//所有的域
public void read(InputStream is){
FieldFactory factory=new FieldFactory();
//这里得到位元信息,通过factory创建域信息,并加到fields中
for(int i=0,k=fields.size();i<k;i++){
Field f=(Field)fields.get(i);
f.read(is);
}
//到这里已读完数据,下一步是调用一个要子类实现的抽象方法,对数据进行校验。
validate();
}
public Field getField(int index);
abstrace protected boolean validate();
}