代码之家  ›  专栏  ›  技术社区  ›  janetsmith

为对象或操作/行为创建接口?

  •  4
  • janetsmith  · 技术社区  · 15 年前

    当要创建一个接口时,您是否根据行为创建它,遵循可使用的标准,例如

    interface Comparable
    interface Enumerable
    interface Listable
    interface Talkable
    interface Thinkable
    

    或基于对象,例如

    interface Comparator
    interface Enumerator
    interface List
    interface Human
    

    为什么呢?

    更新

    这个问题与命名约定无关(-able后缀或i前缀)。这是关于接口的设计意图及其影响,就以下方面而言:

    1. 灵活性
    2. 复杂性/简单性
    3. 维修性

    例如,如果我需要实现不同的特性,通过可行的方法,我可以将类声明为

    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();
    
    3 回复  |  直到 15 年前
        1
  •  4
  •   SingleShot    15 年前

    接口与具体类的功能无关。它们更多的是关于客户需要什么,以及替代客户需要什么。例如,不尝试从 Man 类,而是关注使用 班级。它是做什么的?也许它是 Conversation 想要让事情彼此交流的类。如果你给它两个 课程,它可以调用 talk() 在他们身上。但是如果你想让它更灵活,你可以抽象出它所做的事情的概念——让事物说话,并让它使用 Talkable 接口(例如)。当你看到一个 健谈的 此上的接口 会话 同学们,你不应该认为“那真的是 “但更确切地说,”我看到一个 健谈的 ,我可以替代任何工具 健谈的 ,是否是 , Woman , Parrot , Robot 等。

    如果我不清楚的话,在这个问题上有很好的资源可用。看看罗伯特·马丁的 Dependency Inversion Principle , Interface Segregation Principle Liskov Substitution Principle 为初学者准备的文章。

        2
  •  3
  •   Alex Martelli    15 年前

    接口 Comparable 应该由其实例可以比较的类实现;接口 Comparator (在执行任何级别的通用编程的语言中,可能 Comparator<T> !-)应该由实例可以比较其他实例的类实现。这两种用法都有很好的用例,本质上彼此不相交;您似乎缺少这一关键的语义区别。

        3
  •  1
  •   yoda    15 年前

    接口是用来定义对象的必要行为的,您可以对多个对象有类似的行为。就像如果你想创造人类的行为一样,你可以让对象是男人和女人,他们有相同的行为,但是有一些不同的功能/属性。如果您不以这种方式使用接口,在这种情况下,您必须为两个人类性别创建两个接口。

    因此,接口与对象的行为相关。