package vn.edu.rmit.examples; import java.util.Arrays; import java.util.Hashtable; import java.util.Random; public class Searcher { private Hashtable<String,SearchStrategy> strategies = new Hashtable<String,SearchStrategy>(); public static void main(String[] args) { RandomSearch rs = new RandomSearch(); LinearSearch ls = new LinearSearch(); BinarySearch bs = new BinarySearch(); Searcher searcher = new Searcher(); searcher.addStrategy("random",rs); searcher.addStrategy("linear",ls); searcher.addStrategy("binary",bs); // based on input arg choose appropriate strategy if(args.length < 2) { usage(); System.exit(1); } int item = Integer.parseInt(args[0]); String strategy = args[1]; searcher.find(strategy, item); } private static void usage() { System.out.println("java vn.edu.rmit.examples.Searcher item [random|linear|binary]"); } public void find(final String strategy, final int item) { System.out.println("searching for : "+item); SearchStrategy strat = strategies.get(strategy); if(strat.execute(getData(), item)) { System.out.println("found "+ item + " in data"); } else { System.out.println("not found"); } } //generate some test data public int[] getData() { int[] data = new int[1000]; for(int i=0; i<1000; i++) { data[i] = new Random().nextInt(10); } Arrays.sort(data); return data; } public void addStrategy(final String key, final SearchStrategy ss) { strategies.put(key, ss); } }