紧耦合的例子没有意义

时间:2013-12-03 03:23:09

标签: java

public class TightlyCoupledClient{
    public static void main(String[] args) {
        TightlyCoupledServer server = new TightlyCoupledServer();
        server.x=5; //should use a setter method
        System.out.println("Value of x: " + server.x);

        }
}

class TightlyCoupledServer {
    public int x = 0;
}

在“J2J 5平台的SCJP考试”中指出,如果a和b互相使用,它们是紧密耦合的。它使用上面的例子。但TightlyCoupledServer看起来好像它使用了TightlyCoupledClient。我怎么弄错了?

3 个答案:

答案 0 :(得分:1)

相互依赖只是耦合被认为是紧的时候的一种情况。紧耦合的另一种情况是所谓的内容耦合which occurs when one module modifies or relies on the internal workings of another module。对类名的了解被认为是TightlyCoupledServer模块内部工作的一部分;其成员变量的知识也是如此。

添加接口并对其进行编程会减少耦合。使用实现接口的TightlyCoupledServer实例注入代码会进一步减少耦合。

答案 1 :(得分:0)

简单词语中的紧耦合意味着,一个类直接依赖于其他类。 因此,如果修改发生在一个中,则必须测试两个类的功能是否存在任何行为不匹配。

这里TightlyCoupledClient直接依赖于TightlyCoupledServer。因此,如果修改TightlyCoupledServer的构造函数之类的东西,则必须为TightlyCoupledClient适当地测试更改。

答案 2 :(得分:0)

这些类是相互依赖的,但是相当微妙。

显然,TightlyCoupledClient直接取决于TightlyCoupledServer。它就在源代码中。

TightlyCoupledServer在什么意义上依赖于TightlyCoupledClient?好吧,服务器类有一个公共字段,可能它依赖于它的客户端 - 所有这些,而不仅仅是TightlyCoupledClient - 正确地写入这个字段。因此,要验证TightlyCoupledServer的正确性,必须检查系统中可能写入此字段的所有内容的代码。

考虑为TightlyCoupledServer编写单元测试。我们想要写一些类似的东西:

assertEquals("x should be 5", 5, x);

要使此断言成立,TightlyCoupledClient中的代码必须正确,并且必须在此断言之前运行。这是你的依赖。