Шаблон проектирования Builder


На главную
Содержание

С помощью этого шаблона можно абстрагировать процесс создания сложных объектов путем выделения и обобщения классов, создающих отдельные части сложного объекта.

E. Gamma, R. Helm, R. Johnson, J. Vlissides определяют назначение шаблона Builder так: шаблон Builder "отделяет конструирование сложных объектов от его представления так, чтобы один конструирующий процесс мог создавать различные представления".

Схема взаимодействия классов:
Классы шаблона Builder



Реализация на С++
class AbstractBuilder {
public:
virtual void BuildPartA() = 0;
virtual void BuildPartB() = 0;
virtual void BuildPartC() = 0;
};
class Director {
public:
void Construct(AbstractBuilder* abstractBuilder) {
abstractBuilder->BuildPartA();
abstractBuilder->BuildPartC();
}

};
class ConcreteBuilder : public AbstractBuilder {
public:
void BuildPartA() {
cout << "ConcreteBuilder.BuildPartA called" << endl;
}

void BuildPartB() {
cout << "ConcreteBuilder.BuildPartB called" << endl;
}

void BuildPartC() {
cout << "ConcreteBuilder.BuildPartC called" << endl;
}
};
int main() {
ConcreteBuilder* concreteBuilder = new ConcreteBuilder();
Director* director = new Director();

director->Construct((AbstractBuilder*)concreteBuilder);

delete concreteBuilder;
delete director;
return 0;
}



Реализация на C#
class Director {
public void Construct(AbstractBuilder abstractBuilder) {
abstractBuilder.BuildPartA();
abstractBuilder.BuildPartC();
}

}
abstract class AbstractBuilder {
abstract public void BuildPartA();
abstract public void BuildPartB();
abstract public void BuildPartC();
}
class ConcreteBuilder : AbstractBuilder {
override public void BuildPartA() {
Console.WriteLine("ConcreteBuilder.BuildPartA called");
}

override public void BuildPartB() {
Console.WriteLine("ConcreteBuilder.BuildPartB called");
}

override public void BuildPartC() {
Console.WriteLine("ConcreteBuilder.BuildPartC called");
}
}
public class Client {
public static int Main(string[] args) {
ConcreteBuilder concreteBuilder = new ConcreteBuilder();
Director director = new Director();

director.Construct(concreteBuilder);

return 0;
}
}


Содержание
На главную

Rambler's Top100
Хостинг от uCoz