Java中的接口优势
我的问题很简单:如果接口由单个类实现,那么使用接口有什么好处吗?Java中的接口优势,java,interface,Java,Interface,我的问题很简单:如果接口由单个类实现,那么使用接口有什么好处吗? 我一直认为只有当接口有多个实现时,接口才是好的 谢谢。接口是分离软件组件的一种方法。当然,您现在可以使用Oracle数据库来存储所有数据,那么为什么不放弃所有DAO接口呢 答案是,与任何事物的强烈耦合可能会在将来回来咬你。如果明年你想使用云服务来存储数据呢?如果您编码到DAO接口,您只需引入一个新的云实现并直接插入即可。您的应用程序是松散耦合的,因此不需要更改。考虑到现在可能只有一个实现,但将来可能会有更多的实现。此外,通过使用接
我一直认为只有当接口有多个实现时,接口才是好的
谢谢。接口是分离软件组件的一种方法。当然,您现在可以使用Oracle数据库来存储所有数据,那么为什么不放弃所有DAO接口呢
答案是,与任何事物的强烈耦合可能会在将来回来咬你。如果明年你想使用云服务来存储数据呢?如果您编码到DAO接口,您只需引入一个新的云实现并直接插入即可。您的应用程序是松散耦合的,因此不需要更改。考虑到现在可能只有一个实现,但将来可能会有更多的实现。此外,通过使用接口,您可以避免仅通过使用接口创建对具体类的依赖。然后,稍后,如果您决定更改实现,您可以创建一个新的实现接口,而不会对仅依赖于您的接口的其他代码产生不利影响 考虑:
public interface SomeInterface {...}
public class AConsumerOfSomeInterface {
private SomeInterface service;
public AConsumerOfSomeInterface(SomeInterface theImplementation) {
service = theImplementation;
}
//some code which uses the service
}
现在,您可以在将来交换实现,而无需更改此类。因为这很容易做到,所以即使您认为不需要接口,使用接口也是有意义的。问问自己,在不久的将来是否真的有可能有不止一种实现 您可以在需要时轻松添加接口,有时需要几个接口
即使为单个类创建接口时,唯一的情况是区分常用API和专用API(例如测试、监视)。一句话:不。接口所指的契约可以直接在您的唯一类中指定 如果您清楚将来不需要相同方法的另一个实现,那么可以避免定义接口 当然,这里的问题是“未来”条款。如果项目很小,没有很长的开发/升级周期,并且定义良好,那么您几乎可以确定将来需要什么 如果项目很长,可能会发生变化,那么您必须考虑:
- 您最终需要一个接口的可能性
- 您现在知道接口将来需要什么方法的可能性
- 现在做接口的成本与将来重构的成本
public interface clientInterface{
public foo();
public bar();
}
public class yourClass implements clientInterface{
public foo(){}
public bar(){}
public doSomethingElse(){}
}
public class clientSideFactory{
public clientInterface getClass(){
return new yourClass();
}
}
public class internalSideFactory{
public clientClass getClass(){
return new yourClass();
}
}
}
在上述情况下,即使您有接口clientInterface的单个实现(clientClass),返回到只应看到类的有限部分(限制类完整实现的可见性)的客户端类也是很有用的 我想补充另一点:界面帮助 在web应用程序中,此代理对抽象有很大帮助。我是web应用程序新手,但通常我是通过接口设计服务层的。在使用的web应用程序构建中,我有一个接口
Afrodite
和一个类AfroditeImpl
,作为服务层,从applicationContext初始化为Springbean。然后,我们可以通过以下方式从所有网页中获取在Afrodite
中定义并在afroditimpl
中实现的所有方法:
AfroditeApplication application = (AfroditeApplication)getApplication();
Afrodite afrodite = application.getAfrodite();
// Now call the service layer's methods by afrodite
大纲是:
public interface Afrodite {
}
public class AfroditeImpl implements Afrodite {
}
public class AfroditeApplication extends WebApplication {
Afrodite afrodite;
public Afrodite getAfrodite() {
return afrodite;
}
@Override
public void init() {
super.init();
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
afrodite = (Afrodite) applicationContext.getBean("afrodite");
}
}
希望这能有所帮助。我更喜欢stackoverflow答案,因为有很多优秀的编程人员会给你提供好的答案。可能是@Jigar Joshi的复制品:很好的链接,谢谢。我从没想过这一点。谢谢,我同意你的看法。如果我们只需要相同方法的实现,那么实现接口是没有意义的。但是,当您有许多类、许多方法和更改要做时,这是一个优势。想象一下,如果没有接口,那么要重写的代码就太多了!:请看我的答案。至少有一种情况是,即使没有更多的接口实现,也要证明接口本身的存在是合理的。即使保证不再有其他实现,在很多情况下,创建接口是有意义的,因为它可以使测试接口的具体实现的使用者变得更容易,因为他们可以使用依赖项注入来替代接口的更易于测试的实现。