Как выбрать шаблон проектирования для обработки входных данных?

#c #design-patterns

Вопрос:

У меня есть фрагмент кода, который используется для обработки строк текстовых файлов. Эта функция processFile вызывается для каждого файла в каталоге

 void processFile(const std::stringamp; sourceFileName) {
    std::ifstream sourceFile;
    sourceFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
    try {
        sourceFile.open(sourceFileName);
        if (sourceFile.is_open()) {
            while (sourceFile.peek() != EOF) {
                std::string line;
                std::getline(sourceFile,line);
                // process line here
            }
            sourceFile.close();
        }
    }
    catch (const std::ifstream::failureamp; exception) {
        std::cout << "some exception text here" << std::endl;
        return;
    }
    catch (...) {
        std::cout << "some another exception text here" << std::endl;
    }
}
 

Помимо файлов, мне также нужно считывать данные из каналов и сокетов.
Какой шаблон проектирования можно использовать для абстрактного открытия, чтения и закрытия объекта? Не могли бы вы привести мне, пожалуйста, несколько примеров?

Комментарии:

1. Является // process line here ли деталь одинаковой для каждого типа входных данных? Поместите его в другую функцию, которая может быть вызвана из разных функций, обрабатывающих разные входные данные.

2. Также обратите внимание, что в системах POSIX (таких как Linux и macOS) каналы и сокеты обрабатываются с помощью дескрипторов, и вы можете использовать одну и ту же функцию для чтения из обоих.