Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 耦合度太高还是可以这样设计?_Java_Class_Coupling - Fatal编程技术网

Java 耦合度太高还是可以这样设计?

Java 耦合度太高还是可以这样设计?,java,class,coupling,Java,Class,Coupling,假设我有一个classA,它有自己的方法,有自己的私有字段,你有什么(基本上遵守封装标准)。然后我有classB,它的执行需要classA的最终状态(通过classA的方法之一获得,这在某种程度上打破了封装)。然后我们有classC,它同样需要classB的最终状态。以此类推,让我们说一下classM。是否认为耦合度过高 编辑:好的,假设我在设计战利品系统,这取决于掉落是否基于被击败的敌人(每个敌人有不同的掉落机会)。如果敌人被击败,处理战斗物品的职业将掷骰子,无论它是否掉落物品,然后我需要将该

假设我有一个
classA
,它有自己的方法,有自己的私有字段,你有什么(基本上遵守封装标准)。然后我有
classB
,它的执行需要
classA
的最终状态(通过
classA
的方法之一获得,这在某种程度上打破了封装)。然后我们有
classC
,它同样需要
classB
的最终状态。以此类推,让我们说一下
classM
。是否认为耦合度过高

编辑:好的,假设我在设计战利品系统,这取决于掉落是否基于被击败的敌人(每个敌人有不同的掉落机会)。如果敌人被击败,处理战斗物品的职业将掷骰子,无论它是否掉落物品,然后我需要将该状态传播给处理战利品分配的其他职业。若有掉落,处理战利品的职业将执行战利品生成并分配给玩家,若并没有,则无效

最终的执行将类似于:

classA a = new classA;
...  //classA does its stuff
classB b = new classB(a.getFinalState());
... // again class does its stuff based on outcome of A
classC c = new classC(b.getFinalState());

等等。

是的。与第2级紧密耦合。这是完全可以避免的,被认为是降低代码灵活性和可重用性的糟糕做法。测试是一场噩梦

如果有相关性质,请考虑.</P> 构建器模式是找到伸缩构造函数反模式的解决方案


到目前为止,这种构造函数反模式就是您所拥有的。

编辑:您可以通过遵循a及其近亲实现您想要的


如前所述,生成器模式是一种有效的替代方案。这总是取决于你的原始设计的目的。

我的错,我实际上编辑了我的原始帖子,将我当前的问题包括在问题中。我不明白这里的问题是什么?为什么不把对象a传递给对象b的构造函数呢?它可以通过正常的方式对其进行查询,以确定状态,而不会破坏封装。如果您担心暴露太多,可以尝试使用包私有getter或将接口隔离到它们自己的模块?你问的问题很好,但思考太难了