行为型/访问者模式/VisitorService.cs
(完整代码) 1KBnamespace DesignModeConsole.行为型.访问者模式;
/// <summary>
/// 访问者服务
/// </summary>
public class VisitorService : IService
{
public void Main()
{
Console.WriteLine("示例一");
// 只对这些文件进行提取文本操作
// 违反开闭原则,每次增加功能都要修改所有的类,业务逻辑都在一个类中
var resourceFiles = new List<ResourceFile>();
resourceFiles.Add(new PdfFile("a.pdf"));
resourceFiles.Add(new WordFile("b.word"));
resourceFiles.Add(new PptFile("c.ppt"));
foreach (var item in resourceFiles)
{
item.Extract2Txt();
}
Console.WriteLine("示例2");
// 将业务操作和具体的数据结构解耦,设计成单独的类
// 违反开闭原则,增加功能了需要修改每个资源类
var extractor = new Extractor();
var compress = new CompressorService();
var resourceFiles2 = new List<ResourceFile2>();
resourceFiles2.Add(new PdfFile2("a.pdf"));
resourceFiles2.Add(new WordFile2("b.word"));
resourceFiles2.Add(new PptFile2("c.ppt"));
foreach (var item in resourceFiles2)
{
// 提取文本
item.Accept(extractor);
// 压缩
item.Accept(compress);
}
Console.WriteLine("示例3");
// 将方法抽离出来接口,然后后续增加功能就可以不修改资源类
var extractor2 = new Extractor2();
var compress2 = new CompressorService2();
var resourceFiles3 = new List<ResourceFile3>();
resourceFiles3.Add(new PdfFile3("a.pdf"));
resourceFiles3.Add(new WordFile3("b.word"));
resourceFiles3.Add(new PptFile3("c.ppt"));
foreach (var item in resourceFiles3)
{
// 提取文本
item.Accept(extractor2);
// 压缩
item.Accept(compress2);
}
}
}
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。