gpt4 book ai didi

Java:面向对象设计;链表和栈

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:26 24 4
gpt4 key购买 nike

我正在用 Java 编写 BFS 和 DFS。我希望做的是创建一个这样的类:

/** Preforms BFS and DFS on ...
*/
public class Search{


private XXX toSearch;
// where XXX is an interface of Stack and LinkedList that has
// remove() and add() methods.

public Search(boolean isBFS){
if(isBFS)
toSearch = new LinkedList();
else
toSearch = new Stack();
}

public void preformSearch(){
while(toSearch.size() > 0){
preformSearchOn(toSearch.remove()); // <----- KEY LINE
}
}

private void preformSearchOn(...){...}

}

该类可以根据其初始化方式执行 BFS 和 DFS。什么是XXX?我不认为它存在。

我认为面向对象编程的全部意义在于能够做这样很酷的事情。

处理这个问题最干净的方法是什么?

最佳答案

我认为您正在寻找 Strategy pattern .这样做的方法不是特定于 Java 的,也不是其他“很酷的东西”。这些类型的事物超越语言。

更具体地说,再开发两个名为 BfsStrategy 和 DfsStrategy 的类。要求每个类实现一定的Strategy接口(interface)。使用您发布的类透明地对它们执行操作。 (如果需要,将类/接口(interface)名称更改为更合适。)

例如:

public final class Seeker<E, K> {

private final E structure;
private final SearchStrategy strategy;

public Seeker(final E aStructure, final SearchStrategy aStrategy) {
structure = aStructure;
strategy = aStrategy;
}

public boolean search(K aKey) {
return strategy.search(structure, key); //Pretty generic.
}

}

关于Java:面向对象设计;链表和栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com