使用哪种设计模式

时间:2012-01-14 05:07:40

标签: java design-patterns

在采访中,这是一个被问到的问题:

  

您必须编写一个采用目录名称的程序(例如D:\ XYZ)   和正则表达式(例如“ Olivea ”)作为参数。它会   列出给定目录中名称匹配的所有文件   用正则表达式。

我做了一个简单的程序:

package temp;

import java.io.File;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileSearch1 {

    static ArrayList l = new ArrayList();

    public static void main(String[] args) {

        String folderName = "D:\\"; // the folder path in which you want to
                                    // search
        String strPattern = "Olivea"; // Pattern what you want to search
        final boolean searchinFile = true; // if you want to search in file keep
                                            // it true for folder search keep it
                                            // false
        File f = new File("D:\\");
        Pattern pattern1 = Pattern.compile(strPattern);
        sunny(f, pattern1, searchinFile);

    }

    public static void sunny(File f, Pattern pattern1,
            final boolean searchinFileOnly) {
        File[] f1 = f.listFiles();
        if (f1 == null)
            return;
        int k = f1.length;
        // System.out.println(k);
        int i = 0;
        while (i < k) {
            File f2 = f1[i];
            if (f2.isDirectory() && !searchinFileOnly) {
                Matcher match1 = pattern1.matcher(f2.getName());
                while (match1.find()) {
                    l.add("");
                    System.out.println(f2.getName());
                }
            } else if (f2.isFile() && searchinFileOnly) {
                Matcher match1 = pattern1.matcher(f2.getName());
                while (match1.find()) {
                    l.add("");
                    System.out.println(f2.getName());
                }
            }

            sunny(f2, pattern1, searchinFileOnly);
            i++;
        }
    }
}
经过笔试,面试官问我哪个设计 你可以在这个中使用模式吗?你能不能给我推荐各种各样的东西 我们可以在这段代码中实现的设计模式。?

请帮我解决如何应用复合和迭代器模式?帮助将非常感谢

2 个答案:

答案 0 :(得分:4)

忽略了您错过了编码的No.1黄金法则,即一切都应该正确命名的事实,您可以使用IteratorComposite模式。

Composite允许对文件和目录进行类似处理。

Iterator用于遍历容器并访问容器的元素。迭代器模式将算法与容器分离。

答案 1 :(得分:2)

您可以在使用通用方法创建接口的地方使用strategy pattern

您将提供一个实现该接口的类。这样您就可以分离实现细节。根据输入数据,您可以使用不同的算法编写更多类。在运行时,您可以选择所需的任何类实现。这只是另一种选择。我建议你学习GOF模式。