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 Archer {
- public:
- void info() {
- cout << "Archer\n";
- }
- };
- class Swordman {
- public:
- void info() {
- cout << "Swordman\n";
- }
- };
- class Wear {
- public:
- void info() {
- cout << "Wear\n";
- }
- };
- class Army {
- public:
- vector <Archer> va;
- vector <Swordman> vs;
- vector <Wear> vw;
- void info() {
- for (auto& s: va) {
- s.info();
- }
- for (auto& t: vs) {
- t.info();
- }
- for (auto& w : vw) {
- w.info();
- }
- }
- };
- class ArmyBuilder {
- protected:
- Army* p;
- public:
- ArmyBuilder() :p(0) {};
- virtual void createArmy() {};
- virtual void buildArcher() {};
- virtual void buildSwordMan() {};
- virtual void buildWear() {};
- virtual Army* getArmy() {
- return p;
- };
- };
- class RomanArmyBuilder :public
- ArmyBuilder {
- public:
- void createArmy() {
- p = new Army;
- }
- void buildArcher() {
- p->va.push_back(Archer());
- }
- void buildSwordMan() {
- p->vs.push_back(Swordman());
- }
- void buildWear() {
- p->vw.push_back(Wear());
- }
- };
- class SpainArmyBuilder :public
- ArmyBuilder {
- public:
- void createArmy() {
- p = new Army;
- }
- void buildArcher() {
- p->va.push_back(Archer());
- }
- void buildSwordMan() {
- p->vs.push_back(Swordman());
- }
- void buildWear() {
- p->vw.push_back(Wear());
- }
- };
- class Director {
- public:
- Army* createArmy(ArmyBuilder& builder)
- {
- builder.createArmy();
- builder.buildArcher();
- builder.buildSwordMan();
- builder.buildWear();
- return (builder.getArmy());
- }
- };
- int main() {
- Director dir;
- RomanArmyBuilder rb;
- Army* ra = dir.createArmy(rb);
- ra->info();
- SpainArmyBuilder sb;
- Army* sa = dir.createArmy(sb);
- sa->info();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement