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)
或手动,但现在不是重点.
我也在其他情况下使用它.
我的问题是:
这种模式的名称是什么?(也许这是对模式的修改,不知道).