我应该在这里建一个工厂吗?
本文关键字:一个 工厂 在这里 我应该 | 更新日期: 2023-09-27 17:54:15
我有一个简单的类ExcelStringBuilder。它用于创建一个可以导出到Excel的字符串。现在我还需要构建一个CSV字符串。
我认为实现这两个类的唯一区别是在构建字符串时要使用的分隔符。对于Excel,它将是"'t"制表符和CSV的","逗号。
我认为将分隔符作为参数传递给ExcelStringBuilder类构造函数。这是一个正确的决定,还是我应该按照工厂的模式去做?
不要过度设计。我只需要稍微重构一下现有的类:
- 将其重命名为
ExportStringBuilder
- 在构造函数中传递分隔符,或作为
ToString()
函数 的参数。
你知道有一些很棒的免费库可用于此,是吗?例如:
如果只有的区别是分隔符,我将直接传递该分隔符。其他的都是多余的。
如果有更多的差异,我将创建一个返回IStringBuilder
的StringBuilderFactory
。ExcelStringBuilder
和CsvStringBuilder
都将实现该接口。您将向工厂传递一个参数,该参数告诉工厂您是想要Excel字符串生成器还是CSV字符串生成器,它将返回正确的。
如果您计划使用工厂,您可以将模板模式与factory一起使用,也可以单独使用。由于算法的大部分将保持不变,除了一个步骤,将来你可能会有额外的步骤,以及(如新的分隔符)
这是使用模板模式的一种方法。你可以使用"Getter"来代替GetDelimiter()。
class abstract StringBuilder
{
public virtual string GetDelimiter();
public string BuildString(string inputString)
{
// Your Code goes here...
GetDelimiter(); // Code to introduce the delimiter
// Some more of your code
}
}
class ExcelStringBuilder : StringBuilder
{
public override string GetDelimiter()
{
return "'t";
}
}
class CsvStringBuilder : StringBuilder
{
public override string GetDelimiter()
{
return ",";
}
}