创建界面时,请根据行为创建界面,遵循-able标准,例如
interface Comparable
interface Enumerable
interface Listable
interface Talkable
interface Thinkable
或基于对象,例如
interface Comparator
interface Enumerator
interface List
interface Human
为什么?
更新
此问题与命名约定(-able后缀或I-前缀)无关。这是关于界面的设计意图及其影响,包括: -
例如,如果我需要实现不同的功能,通过可行的方式,我可以将我的类声明为
public class Man implements Talkable, Thinkable, Laughable
public class Woman implements Talkable, Thinkable, Laughable
另一方面,如果我们基于对象创建接口,我们可以将其用作
public class Man implements Human
public class Woman implements Human
我们也可以将它用于多态目的。
Human man = new Man();
答案 0 :(得分:4)
接口与具体类的作用无关。它们更多地是关于客户需要什么,以及什么是可替代的,取代客户需要的东西。例如,不是尝试从Man
类中提取接口,而是专注于使用Man
类的其中一个类。它有什么作用?也许这是一个Conversation
课程,希望让事情相互交流。如果你给了它两个Man
类,它可以在它们上面调用talk()
。但是如果你想要它更灵活,你可以抽象出它的作用的概念 - 使事情说话,并让它使用Talkable
接口(例如)。当您在此Talkable
课程上看到Conversation
界面时,您不应该认为“这真的是Man
”,而是“我在哪里看到Talkable
,我可以替换实现Talkable
的任何内容,无论是Man
,Woman
,Parrot
,Robot
等。“
如果我不清楚,有关该主题的可用资源很多。查看Robert Martin的Dependency Inversion Principle,Interface Segregation Principle和Liskov Substitution Principle文章,了解初学者。
答案 1 :(得分:3)
接口Comparable
应该由其实例可以比较的类实现;接口Comparator
(在任何级别的泛型编程语言中,可能是Comparator<T>
! - )应该由其实例可以比较其他的类来实现。这两种用法都有很好的用例,基本上是相互脱节的;你似乎错过了这种关键的语义区别。
答案 2 :(得分:1)
接口用于定义对象的必要行为,并且您可以对多个对象具有类似的行为。就像您想要创建人类的行为一样,您可以拥有共享相同的对象的男人和女人行为,但有一些不同的功能/属性。如果不以这种方式使用接口,在这种情况下,您必须为两个人类性别创建2个接口。
因此,接口与对象的行为有关。