1. 程式人生 > >Java 學習筆記 觀察者模式與適配者模式 監控文件夾

Java 學習筆記 觀察者模式與適配者模式 監控文件夾

直接 htm ada alter onf 觀察者模式 observe public system

2019.4.12

適配器模式,如果某個類需要實現多個方法,但是開發過程中只需要實現其中的一兩個方法,直接使用該類的適配器類,復寫需要實現的方法即可
觀察者模式:有多個觀察者observe觀察一個主體,當主體發生變化時候,回調觀察者綁定的監聽器的方法

使用觀察者模式,對某個文件夾進行監控

這裏使用第三庫,apache-common-io,裏面有許多有關封裝好的IO類,比如文件的復制,移動刪除等等

1. 先創建一個FileAlterationObserver

FileAlterationObserver(String directoryName, FileFilter fileFilter, IOCase caseSensitivity)
//文件過濾器可以使用封裝好的SuffixFileFilter(直接以擴展名就行篩選)
//IOCase是一個枚舉類,裏面有三個選項,當前的系統是否區分大小寫,Windows系統文件管理是不區分文件的大小寫的,而linux支持
//INSENSITIVE SENSITIVE SYSTEM
//不敏感(不區分大小寫) 敏感的(支持) 按照當前系統,一般使用第三個
FileAlterationObserver txtObserver = new FileAlterationObserver("d:\\dir", new SuffixFileFilter(new String[]{".txt",".java",".html"}), IOCase.SYSTEM);

2. 給觀察者Ovsever添加監聽器

// 適配器模式(設計模式中的一種),其實就對原生接的方法做了默認的空實現
txtObserver.addListener(new FileAlterationListenerAdaptor(){
    /**
     * 文體出現的新文件時,將會執行此方法
     * @param file
     */
    @Override
    public void onFileCreate(File file) {
        System.out.println("FileMonitor.onFileCreate(): 新文件名:" + file.getName());
        try {
            // 目標文件
            File destFile = new File("d:\\txt", file.getName());
            // copy file to txt directory
            FileUtils.copyFile(file, destFile);//FileUtils文件管理類,有移動文件,復制文件等方法
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3.為主體設置觀察者

try {
    //監控,每5s檢測一次
    FileAlterationMonitor monitor = new FileAlterationMonitor(5000, txtObserver, mp3Observer);
    monitor.start();//FileAlterationMonitor實現了Runnble接口,相當於一個線程,使用start開啟
} catch (Exception e) {
    e.printStackTrace();
}

Java 學習筆記 觀察者模式與適配者模式 監控文件夾