最近工作中有这样一个场景:
一个解析器,,处理不同的音/视频文件。刚开始我选择了策略模式,照搬书上的样例如此设计类图:
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
分享到:
相关推荐
- 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 - 单例模式(Singleton):保证一个类只有一个实例,并提供全局访问点。 - 构建器模式(Builder)...
在C#中,策略模式可以结合接口或抽象类来实现,使得代码更加灵活,易于扩展。 最后,适配器模式是一种结构型设计模式,它能使两个不兼容的接口协同工作。C#中的适配器模式可以通过类适配器或对象适配器来实现,帮助...
本文主要关注的是Java编程语言中的设计模式,结合“Java与模式-笔记二”的博客内容,我们将深入探讨其中的一些核心设计模式及其在实际开发中的应用。 首先,我们来谈谈单例模式(Singleton)。单例模式确保一个类...
设计模式分为三类:创建型模式(如单例模式、工厂模式、建造者模式、原型模式)、结构型模式(如适配器模式、桥接模式、装饰器模式、外观模式、组合模式、代理模式)和行为型模式(如策略模式、观察者模式、责任链...
接下来,我们谈谈抽象工厂模式。抽象工厂是设计模式的一种,主要用于创建相关或依赖对象的家族,而无需指定它们的具体类。在连接不同类型的数据库时,如MySQL和SQL Server,抽象工厂可以帮助我们创建适配特定数据库...
- 阐述抽象类和接口的区别。 - 何时应该使用final关键字? - 介绍单例设计模式并给出线程安全的实现方式。 - 解释工厂方法模式和抽象工厂模式的应用场景。 3. **多线程与并发** - 什么是线程安全?举例说明。 ...
总结来说,"数据层万能实体类方法"是一种提高代码效率和可维护性的设计策略,通过抽象出通用的数据库操作接口,降低了代码重复度,使得数据层的开发更加简洁高效。配合ORM框架,可以进一步简化数据库操作,让开发者...
- 什么是抽象类和接口,它们的区别是什么? - C#中的访问修饰符有哪些,分别代表什么意思? - 介绍C#中的异常处理机制,如何使用try-catch-finally语句? 3. **面向对象编程** - 阐述封装、继承和多态在面向...
6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。在Java中,适配器可以帮助不同接口的类协同工作。 7. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。Java...
设计模式是解决特定软件设计问题的常见解决方案,比如单例模式、工厂模式、策略模式等。在`clean-ts-api`项目中,可能运用了如依赖注入、装饰者模式等,这些模式使得代码更灵活,降低了耦合度,增强了系统的可扩展性...
Tiles框架通常与Struts框架结合使用,用来定义页面布局和组织页面结构。 **11. Struts1.x和Struts2的区别** - **架构差异**:Struts2采用了拦截器栈模型,而Struts1则采用了传统的MVC模式。 - **配置方式**:...
15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织应用程序 .198 16.1 基 本 概 念 .198 16.2 使用名字空间 .200 16.3 使用指示符 .203 16.4 程 序 示 例 .206 16.5 小 结 .213 第十七章 文 件 ...