行为型/访问者模式/VisitorService.cs

(完整代码) 1KB

namespace 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 算力,解读结果公开显示在下面。

还没有人解读过这个文件。