首页 > 其他分享 >代理模式的简单理解

代理模式的简单理解

时间:2023-06-11 21:33:39浏览次数:40  
标签:文件夹 String read File after 代理 模式 理解 file

1.废话

​ 上次io流联系的时候,有一个地方有待优化,计划使用代理模式。恰逢开始写博客,着闲着也是闲着记录一下丰富一下我的博客记录,之前看过一些网上其他的代理的讲解都很高端,我这技术有限只说一下自己理解的代理模式

2. 背景

​ 之前统计项目中废没在被使用的VUE文件时写了一个遍历文件夹的方法,后来清理废弃方法时再次需要用到了递归文件夹的场景,重新写一次肯定是没问题的,但之后可能还会再次使用。在设计的角度来说,递归文件夹这个操作属于常用操作应该抽象为工具类,为了实现功能改动工具类中的代码是不合理的,先看旧版代码

    public static void   traverseFolders(File[] files, String  after) {      //遍历文件夹
        for (File file : files) {
            //当前文件为文件夹时
            if (file.isDirectory()) {
                //获得该文件夹下的所有文件以及文件夹
                File[] files1 = file.listFiles();
                if (files1 != null) {
                    traverseFolders(files1, after +"/"+file.getName());
                }
            } else {
                //以下为便利需要执行的特殊逻辑
                Boolean flag1;
                Boolean flag2;
                String read = ioRead.readCode( file );
                List<String> functions = dealStr.getFunctionList(read);
                HashMap<String, Boolean> map = new HashMap<>();
                for (String f : functions) {
                    flag1 =read.replace(f+"(","").length()+f.length()+1!=read.length();
                    flag2 =read.replace("\""+f+"\"","").length()!=read.length();
                    map.put(f,flag1||flag2);
                }
                String path ="C:\\Users\\22177\\Desktop\\io流\\无用方法.txt";
                for (Map.Entry<String, Boolean> function : map.entrySet()) {
                    if (!function.getValue()){
                        ioWrite.log(after+"/"+file.getName()+"中的"+function.getKey()+"没有被引用",path);
                    }
                }
            }
        }
    }

3.开写

先定义一个接口作为作为代理的参数

public interface Iodeal {
    public abstract void prtFile(String after, File file);
}

然后将上面原来方法中的特殊操作的部分交给我们定义的代理接口来

    private static Iodeal iodeal=null ;
    /***
     *
     * @param io 代理操作类
     * @param filePathTxt 文件夹路径
     * @param after 前缀
     */
    public static void traverseDela(Iodeal io,String  filePathTxt, String  after){
        File file = new File(filePathTxt);
        File[] files = file.listFiles();
        //写之前进行清空操作
        IoWrite.clearTxt("C:\\Users\\22177\\Desktop\\io流\\无用方法.txt");
        iodeal=io;
        traverseFolders(files,after);
    }

    public static void   traverseFolders(File[] files, String  after) {      //遍历文件夹
        for (File file : files) {
            //当前文件为文件夹时
            if (file.isDirectory()) {
                //获得该文件夹下的所有文件以及文件夹
                File[] files1 = file.listFiles();
                if (files1 != null) {
                    traverseFolders(files1, after +"/"+file.getName());
                }
            } else {
                //这里原来是特殊操作
                iodeal.prtFile(after, file);
            }
        }
    }

然后进行调用,调用时重写接口里面的方法

 public static void main(String[] args) {

            IoFolder.traverseDela(new Iodeal() {
            @Override
            public void prtFile(String after, File file) {
                Boolean flag1;
                Boolean flag2;
                String read = IoRead.readCode( file );
                List<String> functions = DealStr.getFunctionList(read);
                HashMap<String, Boolean> map = new HashMap<>();
                for (String f : functions) {
                    flag1 =read.replace(f+"(","").length()+f.length()+1!=read.length();
                    flag2 =read.replace("\""+f+"\"","").length()!=read.length();
                    map.put(f,flag1||flag2);
                }
                String path ="C:\\Users\\22177\\Desktop\\io流\\无用方法.txt";
                for (Map.Entry<String, Boolean> function : map.entrySet()) {
                    if (!function.getValue()){
                        IoWrite.log(after+"/"+file.getName()+"中的"+function.getKey()+"没有被引用",path);
                    }

                }
            }
        }, "D:\\JAVA\\wokerspace\\bklianxi\\blog-api\\blog-app\\src\\views", "");
    }

4.结束

完事啦!!

标签:文件夹,String,read,File,after,代理,模式,理解,file
From: https://www.cnblogs.com/jiqingqing/p/17473653.html

相关文章

  • 单例模式(static应用场景)
     单例模式(Singleton) 设计-->一个类只能创建一个对象有效减少内存占用空间 设计一个系统--->百度搜索引擎 publicclassBaidu{ publicvoid搜索(Stringkeyword){ } } 创建一个Baidu对象new 调用搜索的方法做事情方法执行一遍 同一时间有很多很多......
  • X Windows的理解
    XWindows的理解Xwindow是Unix/Linux系统上的图形用户界面一个Linux的发行版,比如说Ubuntu,Centos都是Linux内核加上图形用户界面(比如GNome,KDE)再加一堆应用软件组成的。所以说xwindow也是Linux上的一个应用软件,没有它,Linux也照样可以跑。xwindow可以理解为操作系统的GUI程......
  • VMware Workstation 桥接模式的网卡上让虚拟机使用 VLAN 的正确方法
    要解决的问题有一个虚拟机运行在VMWareworkstation中,如何让这个虚拟机桥接到宿主机的网络上的某个VLAN?常见使用场景只有一个网口的单臂软路由,同时宿主机为Windows,虚拟机软件为VMwareWorkstation,在虚拟机中运行OpenWrt需要在一个网口上,利用VLAN实现虚拟WAN口上的P......
  • C++ 单例模式的各种坑及最佳实践
    单例模式是设计模式中最简单、常见的一种。其主要目的是确保整个进程中,只有一个类的实例,并且提供一个统一的访问接口。常用于Logger类、通信接口类等。基本原理限制用户直接访问类的构造函数,提供一个统一的public接口获取单例对象。这会有一个“先有鸡还是先有蛋”的问题:......
  • 单机下RocketMq安装-多Master模式
    版本:5.1.1官方下载地址:https://rocketmq.apache.org/zh/downloadjdk版本:jdk1.8.0_201在指定目录下新建文件夹rocketmq,并下载安装包到目录下cd/usr/localmkdirrocketmqwgethttps://dist.apache.org/repos/dist/release/rocketmq/5.1.1/rocketmq-all-5.1.1-bin-release.zi......
  • 使用双重检查锁定技术保证多线程中单例模式的线程安全
    使用双重检查锁定技术保证多线程中单例模式的线程安全前言单例模式是一种设计模式,保证一个类只有一个实例,并且在整个应用中共享。它适用于需要控制对共享资源的访问,例如数据库连接、配置文件或日志记录器。但是,在多线程环境下实现单例模式可能比较棘手。如果多个线程同时尝试创......
  • 打开Windows测试模式
    0概述为了在发布前测试Windows驱动,需要在本地计算机上做验证,就需要打开Windows“测试模式”,即TestMode。1步骤关闭“安全启动”,即secureboot;打开“测试模式”,即testmode;安装驱动1.1关闭“安全启动”(secureboot)首先查看计算机是否已开启secureboot,如果未开启,则直......
  • 第17章 迭代器模式(Iterator Pattern)
    概述在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责......
  • 第16章 命令模式(Command Pattern)
    命令模式(CommandPattern)——.NET设计模式系列之十七TerryLee,2006年7月概述在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求......
  • 第15章 模版方法模式(Template Method)
    摘要:TemplateMethod模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。 主要内容1.概述2.TemplateMethod解说3..NET中的TemplateMethod模式4.适用性及实现要点 概述变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的......