.NET BCL中是否有Builder模式的示例?

时间:2009-05-29 09:33:22

标签: .net design-patterns

.NET基类库中是否有完整构建器模式的示例?我正在寻找具有实际导演和多个混凝土建造者的东西。

2 个答案:

答案 0 :(得分:10)

我远非这方面的专家,但我认为 DbCommandBuilder及其继承类(OdbcCommandBuilderOleDbCommandBuilder,{{3可能是一个例子......如果抽象构建器基类也可以作为导向器。各种具体类委托给它们的基类,然后基类调用这些方法(每个Reflector):

private DbCommand BuildDeleteCommand(DataTableMapping mappings, DataRow dataRow)
{
    DbCommand command = this.InitializeCommand(this.DeleteCommand);
    StringBuilder builder = new StringBuilder();
    int parameterCount = 0;
    builder.Append("DELETE FROM ");
    builder.Append(this.QuotedBaseTableName);
    parameterCount = this.BuildWhereClause(
        mappings, dataRow, builder, command, parameterCount, false);
    command.CommandText = builder.ToString();
    RemoveExtraParameters(command, parameterCount);
    this.DeleteCommand = command;
    return command;
}

这满足了构建者的一些要求:

  • 抽象构建器类
  • 具体的建造者课程
  • 各种DbCommandBuilder方法中的复杂多步构建(BuildDeleteCommandBuildInsertCommandBuildUpdateCommand
  • 产品(DbCommand,由具体类强制转换为特定的命令类型),它比SQL字符串更复杂,因为它具有超时,命令类型,可能是事务等等。

但是没有一个单独的班级担任导演;实际上,DbCommandBuilder基类是导演。

答案 1 :(得分:2)

多个混凝土建造者?不是我知道的,除非你算WebRequest.Create这是一件非常微不足道的建筑。

ProcessStartInfoStringBuilder虽然是简单的“一个建设者”的例子,但它们都是合理的。