我有一个方法,我在我的实现中使用了多次,只做了非常简单的修改。我怎样才能避免重蹈覆辙?
...
while (!queue.isEmpty()) {
Element pivot = queue.poll();
elements.remove(pivot);
for (Element a : elements) {
if (areFriends(pivot, a)) {
db.addRelation(a, pivot);
queue.add(a);
elements.remove(a);
}
}
}
...
我想用一个新条件更改 areFriends 条件,例如areEnemies(Element pivot, Element a) 并继续使用整个代码和数据结构。我试图提取一个 void 方法,但在这种情况下,我必须将所有变量(数据库、队列等)作为输入传递,这看起来像是一种反模式。你知道如何解决这个问题吗?谢谢!
最佳答案
创建接口(interface):
public interface Relation
{
public void execute(Element a, Element b);
}
public class AreFriendsRelation implements Relation
{
public void execute(Element a, Element b)
{
// Return the Relation result
}
}
public class AreEnemiesRelation implements Relation
{
public void execute(Element a, Element b)
{
// Return the Relation result
}
}
将您的关系对象传递给您的方法:
public void MyMethod(Relation myRelation) {
...
while (!queue.isEmpty()) {
Element pivot = queue.poll();
elements.remove(pivot);
for (Element a : elements) {
if (myRelation.execute(pivot, a)) {
db.addRelation(a, pivot);
queue.add(a);
elements.remove(a);
}
}
}
...
}
关于java - 如何不重复自己或如何更改方法中的简单条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15529068/