论坛首页 Java企业应用论坛

结合策略模式谈谈抽象类与接口

浏览 2454 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-10-28   最后修改:2009-10-28
OO
最近工作中有这样一个场景:

一个解析器,,处理不同的音/视频文件。刚开始我选择了策略模式,照搬书上的样例如此设计类图:



MediaHandler作为一个处理的类,里面包含一个Parser接口类型的变量。(其实MediaHandler也是作为某接口类型的实现类,这里省略)

后来我发现在各个Parser的实现中有一些公共的代码,所以我把它们抽象,提取了一个AbstractParser。



这样感觉好多了,可在接口-抽象类-POJO之间,还是总感觉不太对劲。

简单说一下实际的功能:(如下图接口定义)

1.接口定义了一个方法,提取文件某时间区间的字节流

2.抽象类实现了这个方法,定义了一个新的抽象方法,解析多媒体信息计算起止位置(读取文件用)。

3.具体实现类是分别针对不同的多媒体文件对多媒体信息进行分析,计算截取文件的起止位置。

public interface Parser {
	
	/**
	 * 抽取相关时间区间内的多媒体字节流
	 */
	ExtractResultV2 getSection(ExtractParamV2 para,String suffix);

}



最后做了如下修改:



这里我修改了一下类名,可能会有更有助于理解。

MediaHandler里的属性我改为了parser:AbstractParser

几个具体的类实现ParserMediaInfoAble接口,用于解析音/视频信息。

----------------------

总结了一下,因为单继承,抽象类与具体类之间有严格的继承关系,遵循“is a”的思想。而接口更多的注重表达此类的一种能力,上例就是重在描述此解析器有分析多媒体信息的能力。

至于策略模式,无所谓属性是接口类型还是抽象类。当然接口的用途不完全于此,例如代理模式。

各位还有没有比较好的想法和意见,欢迎补充/指正。

  • 大小: 34.8 KB
  • 大小: 36.4 KB
  • 大小: 42.2 KB
   发表时间:2009-11-03  
这个问题是否可归结于在设计类层次时,使用接口还是抽象类更好些?

0 请登录后投票
   发表时间:2010-03-08  
首先,我先说这个功能的一个理解。

第一,AbstractPaser中含有实现功能的部分代码,所以它只能是抽象类,不能是接口。
第二,其他继承AbstractPaser的类含有剩下的部分代码,它和AbstractPaser类一起实现一个解析的功能。

剩下的就是那个接口和MediaHandler了,接口好理解,定义“剩下的部分代码”

关键是MediaHandler,它包含一个属性或引用。
它的类型你写的是-AbstractPaser我觉得是-PaserMediaInfoAble的话,会不会好一点呢?!

我对你的MediaHandler类的作用不太了解。不确定它返回解析类,还是返回解析结果,
还是其它什么?

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics