这个设计模式的名称是什么?

Osc*_*ros 2 oop design-patterns

让我们假设我需要在我的应用程序中的文本保存到一个文件,但允许用户有一个以上的格式(.pdf,.word,.txt,...)选择.

第一种方法可能是:

if (extension == ".pdf")
  ExportToPdf(file);
else if (extension == ".txt")
  ExportToTxt(file);
...
Run Code Online (Sandbox Code Playgroud)

但我通常这样封装上面的内容:

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("...");
  }
}
Run Code Online (Sandbox Code Playgroud)

使用它,如果我需要添加一个新的扩展/格式,我所要做的就是为该编写器创建一个新类(继承自Writer)并实现CanWriteTo(..)Write(..)方法,并将该新编写器添加到编写器列表中WritersHandler(可能会添加一个方法Add(Writer w)或手动,但现在不是重点.

我也在其他情况下使用它.

我的问题是:

这种模式的名称是什么?(也许这是对模式的修改,不知道).

Bot*_*000 5

这是责任链.
它基本上定义了一系列处理对象,如果当前的处理对象无法处理它,则将提供的命令传递给下一个处理对象.