Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cassert>
- #include<string>
- #include<vector>
- using namespace std;
- class Working {
- public:
- void info() {
- cout <<"Working\n";
- }
- };
- class Customer {
- public:
- void info() {
- cout << "Customer\n";
- }
- };
- class Boss {
- public:
- void info() {
- cout << "Boss\n";
- }
- };
- class Company {
- public:
- vector <Working> va;
- vector <Customer> vs;
- vector <Boss> vw;
- void info() {
- for (auto& s: va) {
- s.info();
- }
- for (auto& t: vs) {
- t.info();
- }
- for (auto& w : vw) {
- w.info();
- }
- }
- };
- class CompanyBuilder {
- protected:
- Company* p;
- public:
- CompanyBuilder() :p(0) {};
- virtual void createCompany() {};
- virtual void buildWorking() {};
- virtual void buildCustomer() {};
- virtual void buildBoss() {};
- virtual Company* getCompany() {
- return p;
- };
- };
- class CompanyBuilder :public
- CompanyBuilder {
- public:
- void createArmy() {
- p = new Company;
- }
- void buildWorking() {
- p->va.push_back(Working());
- }
- void buildCustomer() {
- p->vs.push_back(Customer());
- }
- void buildBoss() {
- p->vw.push_back(Boss());
- }
- };
- class CompanyBuilder :public
- CompanyBuilder {
- public:
- void createCompany() {
- p = new Company;
- }
- void buildWorking() {
- p->va.push_back(Working());
- }
- void buildCustomer() {
- p->vs.push_back(Customer());
- }
- void buildBoss() {
- p->vw.push_back(Boss());
- }
- };
- class Director {
- public:
- Company* createCompany(CompanyBuilder& builder)
- {
- builder.createCompany();
- builder.buildWorking();
- builder.buildCustomer();
- builder.buildBoss();
- //return (builder.getCompany());
- }
- };
- int main() {
- Director dir;
- RomanArmyBuilder rb;
- Company* ra = dir.createCompany(rb);
- ra->info();
- CompanyBuilder sb;
- Company* sa = dir.createCompany(sb);
- sa->info();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement