我有一个简单的类ExcelStringBuilder。它用于构建可以导出到Excel的字符串。现在我还需要构建一个CSV字符串。
我看到实现这两个类的唯一区别是在构建字符串时要使用的分隔符。对于Excel,它将是“\ t”制表符,CSV为“,”逗号。
我认为将分隔符作为参数传递给ExcelStringBuilder类构造函数。这是一个正确的决定还是我应该选择工厂模式?
答案 0 :(得分:3)
不要过度设计它。我只是稍微重构现有的类:
ExportStringBuilder
ToString()
函数你知道有一些很棒的免费图书馆,你呢?例如。见this question
答案 1 :(得分:1)
如果唯一差异是分隔符,我只会传递该分隔符。其他所有内容都是过度的。
如果存在更多差异,我会创建一个返回StringBuilderFactory
的{{1}}。 IStringBuilder
和ExcelStringBuilder
都会实现该接口。您可以将参数传递给工厂,该工厂告诉工厂您是否需要Excel字符串构建器或CSV字符串构建器,并返回正确的参数。
答案 2 :(得分:1)
如果您打算使用工厂,可以将模板模式与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 ",";
}
}