Вдохновленный FilenameFilter.java, я хочу использовать аналогичный подход / шаблон проектирования для решения моей проблемы. Я выбрал файлы с сервера sftp на основе:
- Если оно старше n дней
- Если он старше n дней и его имя определенным образом.
Я определил функциональный интерфейс SemanticFileFilter, как показано ниже:
public interface SftpFileFilter
{
boolean accept(LsEntry sftpFile);
}
LsEntry для sftp - это что-то вроде File in java.
Требуется определить 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"
}
};
}
Как мне спроектировать метод функции или реализацию фабрики моего интерфейса так, чтобы в будущем, если нужно было определить аналогичные дополнительные фильтры, мне не пришлось бы сильно беспокоиться об изменениях кода, а просто определял новый фильтр.
Также мы должны быть в состоянии связать фильтры. То есть определите один фильтр для более старых файлов и другой для сопоставления с образцом. Если оба должны быть использованы, они должны быть в состоянии соединиться вместе и, следовательно, оба могут быть использованы.