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. } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |