Java中要是一个接口只有一个实现类, 还有必要设计接口吗?
其实是有关DAO接口, 我发现有很多的DAO实现类, 他们各不相同。
比如DogDaoImpl
类有findByBrand()
、save()
等方法。像save()
这样的是可以抽象出来的接口。但findByBrand()
却一般是该类特有的。
HumanDaoImpl
类总不能有个findByBrand()
方法吧, 应该是findByName()
这样的方法才对。
所以感觉要用接口的话, 我得给每一个实现类都定义一个接口。那这样的话, 接口还有什么意义呢?
请教一下, 大家一般的做法是怎么样的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
有必要,因为可以在你需要另一种实现的时候不用修改其他模块中既有的代码。
换而言之,是在扩展模块的需求下,将对原有代码的修改程度限制到用接口控制的耦合点之前。
举个例子:
DogDao有两个方法findByBrand和save,DogDaoMysqlImpl是存进Mysql,DogDaoXmlImpl用xml文本方式存等等。这个时候所有用DogDao接口进行耦合的代码是不依赖具体的实现的,因此可以较为轻松地将DogDao的实现从mysql迁到xml中。
业务设计的时候就把自己从实现中略略抽象出来,面向接口一方面是为了降低耦合,其实也能增强了设计思考的层次感。
我觉得设计的接口的意义在于用MyBatis去实现这些接口。
需要。ioc的应用场景就是考虑到日后会变更逻辑,所以采用动态加载的方式。也就是说它假定你现在不改但以后需要改。
我之前也这么写,后来改用泛型。。。
还是用接口吧,面向接口编程是有一定道理的。你也不差多加载那一个接口。如果你现在用的是mybatis和MySQL,假如某天业务变了要再往别的系统的Oracle数据库里插入数据时,你就不好改了。。不同的数据库用不同的实现即可。
Java的多态设计思想就是易于维护,它的三大特性结合设计模式是很有意思的?
我觉得这个问题没有一个死答案说“有必要”或者“没必要”。而是使用接口更好。
在作为成员变量,参数,返回值以及调用的时候,都使用接口更好。而唯独只有在new的时候才写你那个具体的类。
这样做的好处就是,当你有一天发现实现有问题,或者想换一个实现,那么你只需要更改new的地方就行了。当你体会到了这个思想,那么编程就不光光是写实现,写一个过程代码,而是从功能的角度定义接口,高屋建瓴的思考需要哪些方法,哪些函数。
相关的知识机巧可以参考《Effective Java》