受 FilenameFilter.java 的启发,我想使用类似的方法/设计模式来解决我的问题。我从 sftp 服务器中选择了基于以下内容的文件:
- 如果超过 n 天
- 如果它早于 n 天并且它的名称是某种模式。
我已经定义了一个功能接口 SemanticFileFilter 如下:
public interface SftpFileFilter
{
boolean accept(LsEntry sftpFile);
}
sftp 的 LsEntry 基本上类似于 java 中的 File。
想要定义 SftpFileFilterFactory 以在一个地方获取 SftpFileFilter 的所有实现,如下所示:
public class SftpFileFilterFactory
{
public static final SftpFileFilter OLD_FILE_FILTER = new SftpFileFilter()
{
//ERROR: because Interface function method should take only 1 parameter
//@Override
public boolean accept(LsEntry lsEntry,int nDays)
{
//checks if files if older than nDays
}
};
public static final SftpFileFilter PATTERN_MATCH_OLD_FILE_FILTER = new SftpFileFilter()
{
//ERROR: because Interface function method should take only 1 parameter
//@Override
public boolean accept(LsEntry lsEntry,int nDays, String pattern)
{
//checks if files if older than nDays and matches pattern "pattern"
}
};
}
如何设计我的接口的函数方法或工厂实现,以便将来如果需要定义更多类似的过滤器,我不需要在代码更改上费心,只需定义新的过滤器。
我们也应该能够链接过滤器。也就是说,为旧文件定义一个过滤器,为模式匹配定义另一个过滤器。如果两者都需要使用,它们应该能够链接在一起,因此两者都可以使用。