As you might know, builder design pattern falls under creational design pattern which allows you to create complex object step by step so that you can represent the same object in different forms
To understand the builder design pattern consider a simple example suppose you have a plate object(builder), now you can serve this plate with rice, salad, chicken
Every time the plate will be the same but it will be served with different food varieties
Structure
Participants
- Director (Lenovo builder, HP builder, Dell builder)
- Builder (laptop builder)
- Concrete builder (Director)
- Product (Lenovo, Hp, Dell)
#include <iostream>
using namespace std;
// product
class Laptop{
string _Laptop;
string _Operatingsystem;
string _Batterylife;
public:
Laptop(string LaptopBrand):_Laptop{LaptopBrand} {}
void setBatterylife(string Brand) { _Batterylife = Brand; }
void setOperatingsystem(string Operatingsystem) { _Operatingsystem = Operatingsystem; }
string getBatterylife() { return _Batterylife; }
string getOperatingsystem() { return _Operatingsystem; }
void show() {
cout << "Laptop Brand: " <<_Laptop << endl
<< "Operatingsystem Type: " <<_Operatingsystem << endl
<< "Batterylife Type: "<<_Batterylife << endl << endl;
}
};
// Builder(Abstract Class)
class LaptopBuilder{
protected:
Laptop *_Laptop;
public:
virtual void getPartsDone() = 0;
virtual void buildOperatingsystem() = 0;
virtual void buildBatterylife() = 0;
Laptop* getLaptop(){ return _Laptop; }
};
// Concrete builder
class LenovoBuilder: public LaptopBuilder {
public:
void getPartsDone() { _Laptop = new Laptop("Lenovo"); }
void buildBatterylife() { _Laptop->setBatterylife("4 hours Batterylife"); }
void buildOperatingsystem() { _Laptop->setOperatingsystem("Linux Operatingsystem"); }
};
// Concrete builder
class HPBuilder: public LaptopBuilder {
public:
void getPartsDone() { _Laptop = new Laptop("HP "); }
void buildBatterylife() { _Laptop->setBatterylife("5 hours Batterylife"); }
void buildOperatingsystem() { _Laptop->setOperatingsystem("Mac os Operatingsystem"); }
};
// Concrete builder
class DellBuilder: public LaptopBuilder {
public:
void getPartsDone() { _Laptop = new Laptop("Dell"); }
void buildBatterylife() { _Laptop->setBatterylife("6 hours Batterylife"); }
void buildOperatingsystem() { _Laptop->setOperatingsystem("Window 10 Operatingsystem"); }
};
//Director
// Defines steps and tells to the builder that build in given order.
class Director{
LaptopBuilder *builder;
public:
Laptop* createLaptop(LaptopBuilder *builder) {
builder->getPartsDone();
builder->buildOperatingsystem();
builder->buildBatterylife();
return builder->getLaptop();
}
};
int main() {
Director dir;
HPBuilder hp;
LenovoBuilder le;
DellBuilder de;
Laptop *_hp = dir.createLaptop(&hp);
Laptop *len = dir.createLaptop(&le);
Laptop *del = dir.createLaptop(&de);
_hp->show();
len->show();
del->show();
delete _hp;
delete len;
delete del;
return 0;
}
Output
Laptop Brand:HP
Operating system:mac os
Battery life: 5hours
Laptop Brand:Lenovo
Operating system:Linux
Battery life: 4hours
Laptop Brand: Dell
Operating system: window 10
Battery life: 6hours
Leave a Reply