diff --git a/w10/StrategyFactory.java b/w10/StrategyFactory.java new file mode 100644 index 0000000..4de96f9 --- /dev/null +++ b/w10/StrategyFactory.java @@ -0,0 +1,35 @@ +package com.example.datacollect.strategy; + +import java.util.ArrayList; +import java.util.List; + +public class StrategyFactory { + private final List strategies = new ArrayList<>(); + + public StrategyFactory() { + strategies.add(new HnuNewsStrategy()); + strategies.add(new BlogStrategy()); + strategies.add(new NewsStrategy()); + } + + public CrawlStrategy getStrategy(String url) { + CrawlStrategy bestStrategy = null; + int highestPriority = -1; + + for (CrawlStrategy s : strategies) { + if (s.supports(url) && s.getPriority() > highestPriority) { + bestStrategy = s; + highestPriority = s.getPriority(); + } + } + + if (bestStrategy != null) { + return bestStrategy; + } + return new DefaultStrategy(); + } + + public void register(CrawlStrategy strategy) { + strategies.add(strategy); + } +}