加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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.
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读