В данной работе рассматриваются шаблоны проектирования. Приведены их описания, схемы взаимодействия и примеры кода.
#include <iostream>
#include <string>
class Product {
public:
std::string partA;
std::string partB;
void Show() {
std::cout << "Product parts: " << partA << ", " << partB << std::endl;
}
};
class Builder {
public:
virtual void BuildPartA() = 0;
virtual void BuildPartB() = 0;
virtual Product* GetResult() = 0;
};
class ConcreteBuilder : public Builder {
private:
Product* product;
public:
ConcreteBuilder() { product = new Product(); }
void BuildPartA() override { product->partA = "Part A"; }
void BuildPartB() override { product->partB = "Part B"; }
Product* GetResult() override { return product; }
};
class Director {
public:
void Construct(Builder* builder) {
builder->BuildPartA();
builder->BuildPartB();
}
};
int main() {
Director director;
ConcreteBuilder builder;
director.Construct(&builder);
Product* product = builder.GetResult();
product->Show();
delete product;
return 0;
}
#include <iostream>
#include <string>
class Prototype {
public:
virtual Prototype* Clone() const = 0;
virtual void Show() const = 0;
};
class ConcretePrototype : public Prototype {
private:
std::string name;
public:
ConcretePrototype(std::string n) : name(n) {}
Prototype* Clone() const override { return new ConcretePrototype(*this); }
void Show() const override { std::cout << "Prototype name: " << name << std::endl; }
};
int main() {
ConcretePrototype original("Original");
Prototype* clone = original.Clone();
clone->Show();
delete clone;
return 0;
}