我不久前开始编程。据说,如果将数据和算法结合在一起,那么你就得到了一个程序。这正是我现在所做的,但我听到了这些理论:
准备可预测的更改
总而言之,我没有遇到任何关于接口的理论。我想知道何时何地使用接口来满足良好的标准。
也许你知道很多。然后给我一些提示!例子太棒了!
答案 0 :(得分:3)
很抱歉,如果答案很一般,但问题一般如此。
答案 1 :(得分:3)
答案 2 :(得分:2)
当您将代码设计为高度可测试时,接口非常有用。如果你引用的是接口而不是具体的类,那么测试它们的次数要容易一百万次。
当您定义应该在应用程序或框架中标准化的行为时,接口也很有用。想想IDisposable和INamingContainer之类的东西在很多地方都有不同程度的用处。 IDispose.Dispose()用于释放非托管资源。 “如何”取决于实施者,但它存在的事实对外界来说意味着什么。
答案 3 :(得分:1)
在Java术语中,JDBC API是接口功能的一个很好的例子。数据库供应商提供他们自己的JDBC驱动程序(这只是JDBC API的具体实现),您可以编写统一的JDBC代码,而无需担心与数十个不同数据库的兼容性。
答案 4 :(得分:1)
当你学习驾驶时,你会担心汽车的接口(踏板,制动器,方向盘),而不是它的实现:磁盘制动器和鼓式制动器可以通过相同的接口(踏板)进入。你不关心他们的本性,他们是如何被驱使等等......除非你是一名机械师。当您开车时,您只需通过其通用界面访问它们。性能可能不同,但行为不是。
编程时有两个控制问题,一个是技术问题,另一个是面向业务
处理面向接口的编程是解决这两个问题的好方法。您能够隐藏在定义明确的通用界面漏斗后面的复杂性越多,您拥有的交互就越少(因为您现在看到大量实体作为单个,整体,复杂的实体不再由子部分组成),并且您可以更好地并行化开发任务,因为每个人都能解决他能胜任的问题,而不必弄乱他不熟悉的领域。
答案 5 :(得分:0)
如果您已阅读所有这些术语,但尚未发现它们的含义,那么您就不会阅读所有正确的书籍。
尝试:
我知道它帮助了我很多。
干杯
答案 6 :(得分:0)
我尝试用一个务实的例子来简化:
////////////////////
//VERY(!) simplified, real forums are more complex.
public interface ForumActions{
/** @throws UserDisallowedException, email is not allowed to post. */
Thread startThread(String email, String threadName, String description)
throws UserDisallowedException;
/** @throws UserDisallowedException, email is not allowed to comment. */
void commentThread(String email, Thread thread, String comment)
throws UserDisallowedException;
}
///////////////////////////
//IMPLEMENTATION 1
public class StackOverflowForum implements ForumActions{
/**
* @param email Email of poster, which must have been registered before.
*
* @throws UserDisallowedException The mail address is not registered
*/
public Thread startThread(String email, String threadName, String description)
throws UserDisallowedException {
if(isNotRegistered(email))
throw new UserDisallowedException(...);
...
return thread;
}
}
...
}
///////////////////////////
//IMPLEMENTATION 2
public class JavaRanchForum implements ForumActions{
/**
* @param email Email of poster, which mustn't have exceeded a posting-limit per day.
* This way we protect against spammers.
*
* @throws UserDisallowedException, the mail was identified as a spamming origin.
* is mandatory for posting threads.
*/
public Thread startThread(String email, String threadName, String description)
throws UserDisallowedException {
if(isSpammer(email))
throw new UserDisallowedException(...);
...
return thread;
}
}
...
}
正如您所看到的,界面本身就是一个契约,它是以下的组合:
以上类是接口的实现,必须遵循其合同。 因此,接口不应该过于严格“实施”必须如何实现合同(在我的情况下:为什么不允许用户发布/评论 - >垃圾邮件发送者与未注册)。
如上所述,非常简化的示例,到目前为止还没有完整的接口参考。
关于接口(和一般面向对象)的非常有趣和实用的例子,请看head first design patterns。这对初学者和专业人士都很好