浏览 2494 次
锁定老帖子 主题:结合策略模式谈谈抽象类与接口
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-28
最后修改:2009-10-28
一个解析器,,处理不同的音/视频文件。刚开始我选择了策略模式,照搬书上的样例如此设计类图: MediaHandler作为一个处理的类,里面包含一个Parser接口类型的变量。(其实MediaHandler也是作为某接口类型的实现类,这里省略) 后来我发现在各个Parser的实现中有一些公共的代码,所以我把它们抽象,提取了一个AbstractParser。 这样感觉好多了,可在接口-抽象类-POJO之间,还是总感觉不太对劲。 简单说一下实际的功能:(如下图接口定义) 1.接口定义了一个方法,提取文件某时间区间的字节流 2.抽象类实现了这个方法,定义了一个新的抽象方法,解析多媒体信息计算起止位置(读取文件用)。 3.具体实现类是分别针对不同的多媒体文件对多媒体信息进行分析,计算截取文件的起止位置。 public interface Parser { /** * 抽取相关时间区间内的多媒体字节流 */ ExtractResultV2 getSection(ExtractParamV2 para,String suffix); } 最后做了如下修改: 这里我修改了一下类名,可能会有更有助于理解。 MediaHandler里的属性我改为了parser:AbstractParser 几个具体的类实现ParserMediaInfoAble接口,用于解析音/视频信息。 ---------------------- 总结了一下,因为单继承,抽象类与具体类之间有严格的继承关系,遵循“is a”的思想。而接口更多的注重表达此类的一种能力,上例就是重在描述此解析器有分析多媒体信息的能力。 至于策略模式,无所谓属性是接口类型还是抽象类。当然接口的用途不完全于此,例如代理模式。 各位还有没有比较好的想法和意见,欢迎补充/指正。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-03
这个问题是否可归结于在设计类层次时,使用接口还是抽象类更好些?
|
|
返回顶楼 | |
发表时间:2010-03-08
首先,我先说这个功能的一个理解。
第一,AbstractPaser中含有实现功能的部分代码,所以它只能是抽象类,不能是接口。 第二,其他继承AbstractPaser的类含有剩下的部分代码,它和AbstractPaser类一起实现一个解析的功能。 剩下的就是那个接口和MediaHandler了,接口好理解,定义“剩下的部分代码” 关键是MediaHandler,它包含一个属性或引用。 它的类型你写的是-AbstractPaser我觉得是-PaserMediaInfoAble的话,会不会好一点呢?! 我对你的MediaHandler类的作用不太了解。不确定它返回解析类,还是返回解析结果, 还是其它什么? |
|
返回顶楼 | |