当一个实现类是强制性的并绑定到接口契约时,如何使用Java中的接口实现松散耦合?

时间:2013-10-20 22:27:33

标签: java spring oop design-patterns

当我们必须创建一个实现类时,松散耦合如何与接口相关联?实现类被强制实现接口中定义的所有方法。我不明白这是如何允许失去耦合的?我是面向对象编程和软件设计的新手,所以如果你能对这个主题有所了解,那将会非常有用。一个例子就是锦上添花。

4 个答案:

答案 0 :(得分:11)

关键是接口不仅允许你编写一个实现它的类,它允许你写几个。

当您拥有通过使用接口与类交互的代码时,该代码能够与实现所述接口的任何类一起工作,无论它如何实现它。这允许您将不同的类提供给相同的代码而无需修改它。

请注意,接口不是达到松散耦合组件的唯一方法。松散耦合仅意味着组件能够一起工作而不会假设彼此的内部工作。这样做是因为您的组件越多地将对方视为黑盒子,就越容易在一个组件上进行更改而不影响任何其他组件。接口可以是实现这一目标的一种工具,但它们都不是必需的,它们也不是唯一值得一提的工具。

答案 1 :(得分:9)

实现类能够选择如何实现该功能。

public interface PersonRepository {
    Person getPerson(String name);
}

可以通过阅读CSV文件或查询数据库来实现。需要这个人的对象并不关心这个人是如何被发现或装载的。

因此,它被认为是松散耦合的。

如果它是紧密耦合的,则需要知道如何构造SQL查询或读取CSV文件。

答案 2 :(得分:1)

客户端代码耦合到接口。它没有与实现相结合。您可以在不编译客户端代码或界面的情况下更改实现。

请参阅http://en.wikipedia.org/wiki/Dependency_inversion_principlehttp://en.wikipedia.org/wiki/Open/closed_principle

答案 3 :(得分:0)

可能在下面的解释中可以回答此问题:

进入类A,我们需要具有类B的对象。如果直接将B暴露在A中,则意味着存在紧密耦合。例如:可以向B中添加更多方法或其他任何方法。     这意味着可以基于更多的B暴露来更改A的行为。但是,如果B类正在实现任何接口,并且我们将接口的引用传递给A。这意味着B类的任何更改对进一步的用户A类都不会造成麻烦,因为我们使用用于访问B的接口的ref,并且仅具有必需的访问权限。     例如:         A类{             公共无效添加(BB){                 //实现             }         }         B级{

    }
            this is Tight coupling. Because user can make any changes to class B which are directly exposed to class A and this defines Tight Coupling(Greater the exposure of depending Object , more Tight Coupling).  To resolve this one refer :
    Interface L{

    }
    class B implements L{}
    class A{
        public void add(L  b){
            // Implementation
        }
    }

        Since we are passing the ref of Interface L, adding changes into Implementation of B will not make any difference to class A.