Oop 设计模式:将x添加到y,该方法应该放在哪里?
我有一个X类和Y类,它们基本上是X的集合。我想写一个方法,将一个X添加到一个特定的集合Y中。这个方法会改变X上的一些状态,当然也会改变Y上的一些状态。我的问题是,在X类中使用这个方法的最佳位置是(所以这个方法将是X.addToY(Y)),还是应该在Y类中使用(Y.addX(X))?我应该考虑什么呢?考虑一下,如果你把方法放在X中,当Y包含X的集合时,它自己添加到Y中,那么X必须知道Y,Y必须知道X;如果你把方法放在Y中,那么Y需要知道X,但是X不需要知道Y。你可以避免循环依赖。除了这种方法与Y类的常识关联之外,另一个需要考虑的问题是并发性:虽然这最初可能是一个单线程应用,但你(或其他人)将来可能会扩展类Y以启用同步多线程集合访问,在这种情况下,在Y中使用Oop 设计模式:将x添加到y,该方法应该放在哪里?,oop,design-patterns,Oop,Design Patterns,我有一个X类和Y类,它们基本上是X的集合。我想写一个方法,将一个X添加到一个特定的集合Y中。这个方法会改变X上的一些状态,当然也会改变Y上的一些状态。我的问题是,在X类中使用这个方法的最佳位置是(所以这个方法将是X.addToY(Y)),还是应该在Y类中使用(Y.addX(X))?我应该考虑什么呢?考虑一下,如果你把方法放在X中,当Y包含X的集合时,它自己添加到Y中,那么X必须知道Y,Y必须知道X;如果你把方法放在Y中,那么Y需要知道X,但是X不需要知道Y。你可以避免循环依赖。除了这种方法与Y类
addX
肯定会更方便,这样多线程子类就可以用其并发支持重写该方法。在您的情况下,它非常简单,但是想象一下,Y
可以容纳不同于X
的其他元素,比如A
、B
和C
类型的元素。这些类型是否应该知道如何添加到集合Y
?答案是否定的,但是如果是这样的话,您必须为每种类型实现一个AddToY
方法,这一点都不好。集合Y
知道如何向自身添加项目,而不管这些项目是什么类型的。这被称为,它主要说明每种类型或实体都应该具有其关注的功能。在这种情况下,您可以看到集合应该能够将项目添加到自身,但特定类型的X
可能与集合无关,因此,它不应该具有将自身添加到特定集合的功能。希望这有助于您理解。如果y
是x
的集合,那么您可以将x
添加到y
中,这样添加方法将进入y
。