Tha*_*ham 5 java singleton refactoring
所以我有这个反复执行的方法
public static boolean isReady(String dirPath, int numPdfInPrintJob){
File dir = new File(dirPath);
String[] fileList = dir.list(new FilenameFilter(){
public boolean accept(File file, String filename) {
return (filename.toLowerCase().endsWith(".pdf"));
}
});
if(fileList.length >= numPdfInPrintJob) return true;
else return false;
}
Run Code Online (Sandbox Code Playgroud)
使用anonymous class它的这个方法将创建FilenameFilter每次调用的新实例,并且我调用了很多这个方法.所以我想把它anonymous class变成一个singleton.所以我最初的想法是创建一个singleton看起来像这样的新类
public class PdfFileNameFilter implements FilenameFilter{
private PdfFileNameFilter(){} //non-instantible
//guarantee to only have one instance at all time
public static final PdfFileNameFilter INSTANCE = new PdfFileNameFilter();
public boolean accept(File dir, String name) {
return (name.toLowerCase().endsWith(".pdf"));
}
}
Run Code Online (Sandbox Code Playgroud)
我可以再重构一次吗?我也需要做ZipFileNameFilter,也许许多不同的文件扩展名过滤器.不想为每个过滤器创建一个类.我需要更多地重构这个设计.也许interface在这里的某个地方到位.
如果您只想减少内存使用量,那么您可以做到
private static final FilenameFilter PDF_FILES = new FilenameFilter(){
public boolean accept(File file, String filename) {
return (filename.toLowerCase().endsWith(".pdf"));
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想创建一个单例,最简单的方法是
public enum PdfFileNameFilter implements FilenameFilter {
INSTANCE;
public boolean accept(File dir, String name) {
return (name.toLowerCase().endsWith(".pdf"));
}
}
Run Code Online (Sandbox Code Playgroud)