You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
931 B
29 lines
931 B
package com.example.datacollect.strategy;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class StrategyFactory {
|
|
private final List<CrawlStrategy> strategies = new ArrayList<>();
|
|
|
|
public StrategyFactory() {
|
|
strategies.add(new HnuNewsStrategy());
|
|
strategies.add(new BlogStrategy());
|
|
strategies.add(new NewsStrategy());
|
|
//注册默认策略
|
|
strategies.add(new DefaultStrategy());
|
|
}
|
|
|
|
public CrawlStrategy getStrategy(String url) {
|
|
//按优先级降序排序
|
|
return strategies.stream()
|
|
.sorted((s1, s2) -> Integer.compare(s2.getPriority(), s1.getPriority()))
|
|
.filter(s -> s.supports(url))
|
|
.findFirst()
|
|
.orElse(null); // 如果默认策略未匹配到,返回 null 或默认策略本身
|
|
}
|
|
|
|
public void register(CrawlStrategy strategy) {
|
|
strategies.add(strategy);
|
|
}
|
|
}
|