`
pangyi
  • 浏览: 32804 次
  • 性别: Icon_minigender_1
  • 来自: 古城西安
社区版块
存档分类
最新评论

请教关于继承和引用引申的类设计问题

阅读更多
假设有两个类:DataTag 与 DataTagValue。DataTagValue是DataTag对象将过加工后产生的对象。
目前有两种方式,设计这种关系。
第一种是:Is a的方式,继承的方式。如下代码所示:
public class DataTag {
    protected int tagId;//测点Id
    protected String tagName;//测点名称
    protected String tagDesc;//测嗲描述
    protected String tagUnit;//测点单位
    protected String tagDataSource;//测点数据源
    protected String tagType;//测点的类型。
    protected int tagOrder;//标签排序用
}
public class DataTagValue extends DataTag {

	/**
	 * 
	 */
	private static final long serialVersionUID = 2688238773074983855L;

	private Date date;// 日期
	private float value;// 值
	private String singnal;// 状态
	private String valueType;
}


第二种是:Has a的方式,即引用的方式。如下代码所示:
public class DataTag {
    protected int tagId;//测点Id
    protected String tagName;//测点名称
    protected String tagDesc;//测嗲描述
    protected String tagUnit;//测点单位
    protected String tagDataSource;//测点数据源
    protected String tagType;//测点的类型。
    protected int tagOrder;//标签排序用
}
public class DataTagValue  {

	private DataTag tag;//这里将此作为私有属性来处理。

	private Date date;// 日期
	private float value;// 值
	private String singnal;// 状态
	private String valueType;
}


采用这两种方式有什么区别?可能有人会提到和怎么使用有关系。那我在这里假设一种使用场景。

假设现在要计算某DataTag对象的10个时间的数据,会产生10个DataTagValue,这种情况下继承方式和引用方式,哪种 刚能节省内存?




分享到:
评论
3 楼 pangyi 2008-09-11  
laiseeme 写道
你这个还不是装饰者模式   设计模式用不上了


感觉上是引用方式比较节省内存。

采用引用方式,DataTag的属性信息只需在内存中保留一份,产生的DataTagValue对象只须引用其内存地址即可,这样内存的开销会小很多。
2 楼 laiseeme 2008-09-11  
你这个还不是装饰者模式   设计模式用不上了
1 楼 laiseeme 2008-09-11  
按照设计原则  组合优先于继承  那就has啊

相关推荐

Global site tag (gtag.js) - Google Analytics