首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.2  前期准备:实例所用数据模型说明

15.2.1  建立国家实体和城市实体

为了编写TreeViewer的实例,要改造一下原来用在TableViewer的数据模型,在原有数据模型的基础上再增加两个实体类:国家和城市。国家包含城市,城市包含人。以下给出国家和城市的实体类代码,代码风格与原有的PeopleEntity类似。

//国家的实体类

public class CountryEntity {

    private Long id; //唯一识别码,在数据库里常为自动递增的ID列

    private String name; //国家名

    private List<CityEntity> cities = new ArrayList<CityEntity>(); //此国家所包含的城市的集合

         //---------两个构造函数---------

    public CountryEntity() {}

    public CountryEntity(String name) { this.name = name; }

    //---------字段相应的Getter/Setter方法---------

    public Long getId() { return id; }

    public void setId(Long id) { this.id = id; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public void setChildren(List<CityEntity> children) {this.cities = children;}

    public List<CityEntity> getChildren() {return cities;}

}

//城市的实体类

public class CityEntity {

    private Long id; //唯一识别码,在数据库里常为自动递增的ID列

    private String name;//城市名

    private List<PeopleEntity> peoples = new ArrayList<PeopleEntity>();//城市中的人

    //---------两个构造函数---------

    public CityEntity() {}

    public CityEntity(String name) {this.name = name;}

    //---------字段相应的Getter/Setter方法---------

    public Long getId() { return id; }

    public void setId(Long id) { this.id = id; }

    public String getName() { return name;}

    public void setName(String name) {this.name = name;}

    public void setChildren(List<PeopleEntity> children) {this.peoples = children;}

    public List<PeopleEntity> getChildren() {return peoples;}

}

    //为了以后生成对象方便,给PeopleEntity类多加一个构造函数

    public PeopleEntity() {}

    public PeopleEntity(String name) { this.name = name;  }

15.2.2  建立树结点的接口类

树结点有两个基本特征:名称和子结点。本书将这两个特征抽象出来写成一个接口,然后将要做树结点的实体类实现此接口。注意:这个接口不是必需的,仅是为了今后操作方便,及规范化设计才建立的。

//树结点的接口。接口名称一般以大写的I开头,第二个字母也大写

public interface ITreeEntry<T> {  //  这里的T是JDK5.0泛型功能的用法

    public String getName(); //设置树结点的名称

    public void setName(String name);  //得到树结点的名称

    public void setChildren(List<T> children);  //设置子结点集合

    public List<T> getChildren();  //得到子结点集合

}

15.2.3  让国家、城市、人3个实体类实现此接口

国家、城市与人的关系如图15.2所示。

图15.2  实体类与接口的关系图

在实体类的起始处加“implements ITreeEntry<子实体>”,以表明此类实现于接口ITreeEntry,3个实体类的修改示意如下:

public class CountryEntity implements ITreeEntry<CityEntity> {

public class CityEntity  implements ITreeEntry<PeopleEntity>{

public class PeopleEntity implements ITreeEntry{

接着就要实现接口定义的方法,不过原来在国家和城市的实体类已经实现了这两种方法(当初在设计这两个实体类时,笔者就考虑到了这一点。正常设计顺序应该是先设计接口,再完成实现类)。人的实体类还没有这两种方法,但“人”在本例中是不会有子结点的,所以就让它的这两种方法空实现。

         //人实体。由于人不会有子结点,所以这两种方法无用,让它空实现

         public List getChildren() { return null;}

         public void setChildren(List children) {}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论