1. 策略模式(Strategy Pattern)解耦情况 ✅
接口抽象清晰:CrawlStrategy 定义了统一的爬取接口,包含 supports(String url) 和 crawl(String url) 两个核心方法,所有网站爬取逻辑都实现了该接口。
具体实现解耦:
CsdnCrawlStrategy、JuejinCrawlStrategy 完全独立,各自封装了网站匹配和模拟爬取逻辑。
新增网站爬取策略时,只需新增一个实现类并在 StrategyFactory 中注册,无需修改任何旧代码,严格遵循开闭原则。
高层依赖抽象:CrawlCommand、AnalyzeCommand 仅依赖 CrawlStrategy 接口,不依赖任何具体实现类,实现了依赖倒置。
2. 工厂模式(Factory Pattern)职责单一 ✅
StrategyFactory 负责所有策略的注册与分发,集中管理策略匹配逻辑。
通过 getStrategy(String url) 方法,根据 URL 自动匹配对应策略,命令类无需关心策略的创建与匹配细节。
3. 仓库模式(Repository Pattern)封装与数据安全 ✅
数据封装严格:ArticleRepository 内部持有私有 List<Article>,外部无法直接访问和修改,所有数据操作必须通过其提供的方法进行。
数据安全防护:
addAll 方法实现了双层 null 防御:判空 / 空集合直接返回 + 过滤集合内 null 元素,避免空指针异常。
getAll() 返回 Collections.unmodifiableList() 不可修改视图,防止外部篡改内部数据。