Java:面向对象设计; LinkedList和Stack

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)