Хорошо, предположим, что у меня есть программа Ruby для чтения файлов журнала управления версиями и что-то делать с данными. (Я не знаю, но ситуация аналогична, и я получаю удовольствие от этих аналогов). Предположим, что прямо сейчас я хочу поддержать Bazaar и Git. Предположим, что программа будет выполнена с каким-то аргументом, указывающим, какое программное обеспечение для управления версиями используется.
Учитывая это, я хочу создать LogFileReaderFactory, который, учитывая имя программы управления версиями, вернет подходящий читатель файла журнала (подкласса из общего), чтобы прочитать файл журнала и выплюнуть каноническое внутреннее представление. Поэтому, конечно, я могу сделать BazaarLogFileReader и GitLogFileReader и жестко закодировать их в программе, но я хочу, чтобы он был настроен таким образом, что добавление поддержки для новой программы управления версиями так же просто, как переполнение нового файла класса в каталоге с Bazaar и читателями Git.
Итак, прямо сейчас вы можете вызывать "делать-что-то-с-журналом" - программное обеспечение git "и" делать что-то-с-журналом - программный базар ", потому что есть журналы для тех, кто, Я хочу, чтобы было возможно просто добавить класс и файл SVNLogFileReader в один и тот же каталог и автоматически иметь возможность вызывать" do-something-with-the-log -software svn" без каких-либо изменений в остальной части программа. (Конечно, файлы могут быть названы с определенным шаблоном и globbed в требовании вызова.)
Я знаю, что это можно сделать в Ruby... Я просто не понимаю, как это сделать... или если я вообще это сделаю.