six*_*ude 3 java oop stack list
我正在用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(...){...}
}
Run Code Online (Sandbox Code Playgroud)
该类可以执行BFS和DFS,具体取决于它的初始化方式.什么是XXX?我不认为它存在.
我认为面向对象编程的全部意义在于能够做到这样的很酷的东西.
处理这个问题的最简洁方法是什么?
Mik*_*ike 11
我认为你正在寻找战略模式.这样做的方法不是Java特定的,或者其他"很酷的东西".这些类型的东西超越了语言.
更具体地说,开发另外两个名为BfsStrategy和DfsStrategy的类.要求每个类实现某个Strategy接口.使用您发布的类来透明地对它们执行操作.(如果需要,更改类/接口名称更合适.)
例如:
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.
}
}
Run Code Online (Sandbox Code Playgroud)