Java:面向对象设计; LinkedList和Stack
发布时间:2020-12-15 04:53:07  所属栏目:Java  来源:网络整理 
            导读:我正在用 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
                
                
                
            | 
 我正在用 
 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接口.使用您发布的类来透明地对它们执行操作. (如果需要,更改类/接口名称更合适.) 例如: 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.
    }
}(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
