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