Предположим, мне нужно сохранить текст в моем приложении в файл, но позволить пользователю выбрать более одного формата (.pdf
, .word
, .txt
, ...
).
Первый подход может быть:
if (extension == ".pdf")
ExportToPdf(file);
else if (extension == ".txt")
ExportToTxt(file);
...
но я обычно инкапсулирую вышесказанное так:
abstract class Writer
{
abstract bool CanWriteTo(string file);
abstract void Write(string text, string file);
}
class WritersHandler
{
List<Writer> _writers = ... //All writers here
public void Write(string text, string file)
{
foreach (var writer in _writers)
{
if (writer.CanWriteTo(file)
{
writer.Write(text, file);
return;
{
}
throw new Exception("...");
}
}
Используя его, если мне нужно добавить новое расширение / формат, все, что мне нужно сделать, это создать новый класс (который наследуется от Writer
) для этого устройства записи и реализовать методы CanWriteTo(..)
и Write(..)
, и добавьте этого нового автора в список авторов в WritersHandler
(возможно, добавив метод Add(Writer w)
или вручную, но сейчас это не главное).
Я также использую это в других ситуациях.
Мой вопрос:
Как называется этот шаблон? (может быть, это модификация шаблона, не знаю).