Java 有没有界面使用不当的例子?

Java 有没有界面使用不当的例子?,java,c#,oop,interface,Java,C#,Oop,Interface,我想避免在不需要界面时使用它。例如,有一个接口AAA,有一个类AAAImpl实现它,这个接口AAA只由AAAImpl实现,而AAAImpl只实现一个接口,这就是AAA。这样做的理由是代码是解耦的,它将更容易进行单元测试,它在将来为添加更多功能留下更多的选择,等等 这些论点有效吗 一个类实现一个接口对于设计类库来说是非常有效的策略,只要类的用户不能直接访问实现类。这是信息隐藏的最佳状态:用户可以看到他们需要看到的内容,而您可以以更多的方式重新设计实现,而不是让用户直接访问实现类 这还为用户提供了测

我想避免在不需要界面时使用它。例如,有一个接口
AAA
,有一个类
AAAImpl
实现它,这个接口
AAA
只由
AAAImpl
实现,而
AAAImpl
只实现一个接口,这就是
AAA
。这样做的理由是代码是解耦的,它将更容易进行单元测试,它在将来为添加更多功能留下更多的选择,等等


这些论点有效吗

一个类实现一个接口对于设计类库来说是非常有效的策略,只要类的用户不能直接访问实现类。这是信息隐藏的最佳状态:用户可以看到他们需要看到的内容,而您可以以更多的方式重新设计实现,而不是让用户直接访问实现类

这还为用户提供了测试代码的灵活性,而无需依赖接口定义之外的任何代码

总的来说,这是一个双赢的局面,没有任何负面影响

就接口的不良使用而言,存在多种可能性:

  • 试图做太多事情的接口-添加一个涵盖执行许多不同任务的类的每个方法的接口是个坏主意,但“基础结构接口”除外,例如定义远程处理所需的接口
  • 试图做得太少的接口-此类接口覆盖了类的一小部分功能,而不允许在不引用实现类的情况下执行有意义的任务
  • 与类的功能不匹配的接口——例如,向可变类添加
    IComparable
    IEquitable

接口的一个坏用法是,当iterface有超过所需的内容时,实现接口的类必须实现通常不应该实现的所有方法

例如,我们有打印接口,我们有许多不同的打印版本(从没有页脚的html文档,从有页脚的html文档,从pdf等)

因此,我们的界面将如下所示:

public interface IPrinter{
    public void printHtmlWithFooter();
    public void printHtmlWithoutFooter();
    public void printPdf();
}
然后是实现:

public class HtmlPrinter implements IPrinter{

    public void printHtmlWithFooter(){
        // some code, printing ....
    }

    public void printHtmlWithoutFooter(){
        // some code, printing ....
    }

    public void printPdf(){}
}


public class PdfPrinter implements IPrinter{

    public void printHtmlWithFooter(){}
    public void printHtmlWithoutFooter(){}

    public void printPdf(){
        // some code, printing ....
    }
}
如您所见,您需要在每个类中实现所有这些方法,即使它们是完全空的。假设您有10个不同的类来实现IPrinter接口,并且您想在接口中添加一个额外的方法,所以您需要在这些类中的每一个中进行实现。 这将是您不应该使用接口的示例之一

相反,您应该只有:

public interface IPrinter{
    public void print();
}

然后,客户机不关心它将如何打印,他只知道必须调用print()方法,就这样。具体的类应该关注具体的实现。

我想可能会有数百种我们甚至无法想象的糟糕的接口用法。。。也许最好只是阅读一些好的实践?这将引导我去做接口只是为了做它,但我想避免在不需要的时候使用接口。使用密封的具体类可能比使用接口更好的一个例子是当对象必须是不可变的时-只有密封的类才能做到这一点保证。然而,这样的用例很少(通常与线程安全相关)。我的老板说接口不好,因为在Eclipse中需要额外的击键。@shmosel这句话本身就让我想找一个新的老板:-)你使用了一个很好的接口示例,但我正在寻找一个不好的接口示例。