繁体   English   中英

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

[英]How is loose coupling achieved using interfaces in Java when an implementation class is mandatory and bound to interface contract?

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

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

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

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

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

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

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

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

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

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

http://en.wikipedia.org/wiki/Dependency_inversion_principlehttp://en.wikipedia.org/wiki/Open/closed_principle

可能在下面的解释可以回答这个:

进入A类,我们需要B类的对象。如果将B直接暴露在A中则意味着存在紧耦合。 例如:可以在B或其他任何东西中添加更多方法。 这意味着A的行为可以基于B的更多暴露而改变。但是如果B类正在实现任何接口并且我们将接口的ref传递给A.意味着B类中的任何变化进一步用户A类不会因为我们使用而烦恼用于访问B的接口的ref,仅获得所需的访问权限。 例如:A类{public void add(B b){// Implementation}} 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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM