Я далеко не эксперт в этой области, но я думаю , что DbCommandBuilder и его наследующие классы ( OdbcCommandBuilder , OleDbCommandBuilder , SqlCommandBuilder ) может быть примером ... если все в порядке, базовый класс абстрактного построителя также служит в качестве директора. Различные конкретные классы делегируют свой базовый класс, который затем вызывает такие методы (для каждого рефлектора):
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 (
BuildDeleteCommand
, BuildInsertCommand
, BuildUpdateCommand
)
- product (
DbCommand
, приведенный к конкретному типу команды конкретными классами), который является более сложным, чем просто строка SQL, поскольку имеет тайм-аут, тип команды, потенциально транзакцию и т. Д.
Но нет отдельного класса, выступающего в качестве директора; по сути, базовый класс DbCommandBuilder
является директором.