93 lines
1.8 KiB
C
93 lines
1.8 KiB
C
|
#include "father.h"
|
||
|
#include <vector>
|
||
|
#include <string>
|
||
|
|
||
|
class Keyboard : public ComputerPart
|
||
|
{
|
||
|
public:
|
||
|
void accept(ComputerPartVisitor *computerPartVisitor)
|
||
|
{
|
||
|
computerPartVisitor->visit(this);
|
||
|
}
|
||
|
string getString()
|
||
|
{
|
||
|
return "Displaying Keyboard";
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class Monitor: public ComputerPart
|
||
|
{
|
||
|
public:
|
||
|
void accept(ComputerPartVisitor *computerPartVisitor)
|
||
|
{
|
||
|
computerPartVisitor->visit(this);
|
||
|
}
|
||
|
string getString()
|
||
|
{
|
||
|
return "Displaying Monitor";
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class Mouse: public ComputerPart
|
||
|
{
|
||
|
public:
|
||
|
void accept(ComputerPartVisitor *computerPartVisitor)
|
||
|
{
|
||
|
computerPartVisitor->visit(this);
|
||
|
}
|
||
|
string getString()
|
||
|
{
|
||
|
return "Displaying Mouse";
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class Computer: public ComputerPart
|
||
|
{
|
||
|
public:
|
||
|
Computer()
|
||
|
{
|
||
|
ComputerPart *keyboard = new Keyboard();
|
||
|
ComputerPart *monitor = new Monitor();
|
||
|
ComputerPart *mouse = new Mouse();
|
||
|
vector.push_back(keyboard);
|
||
|
vector.push_back(monitor);
|
||
|
vector.push_back(mouse);
|
||
|
}
|
||
|
void accept(ComputerPartVisitor *computerPartVisitor)
|
||
|
{
|
||
|
for(size_t i = 0; i < vector.size(); i++)
|
||
|
{
|
||
|
vector.at(i)->accept(computerPartVisitor);
|
||
|
}
|
||
|
computerPartVisitor->visit(this);
|
||
|
}
|
||
|
string getString()
|
||
|
{
|
||
|
return "Displaying Computer";
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
std::vector<ComputerPart *> vector;
|
||
|
};
|
||
|
|
||
|
class ComputerPartDisplayVisitor: public ComputerPartVisitor
|
||
|
{
|
||
|
public:
|
||
|
void visit(Computer *computer)
|
||
|
{
|
||
|
cout << computer->getString() << endl;
|
||
|
}
|
||
|
void visit(Mouse *mouse)
|
||
|
{
|
||
|
cout << mouse->getString() << endl;
|
||
|
}
|
||
|
void visit(Keyboard *keyboard)
|
||
|
{
|
||
|
cout << keyboard->getString() << endl;
|
||
|
}
|
||
|
void visit(Monitor *monitor)
|
||
|
{
|
||
|
cout << monitor->getString() << endl;
|
||
|
}
|
||
|
};
|