67 lines
1.2 KiB
C++
67 lines
1.2 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
using namespace std;
|
|
|
|
struct Produkt {
|
|
virtual ~Produkt() {}
|
|
virtual string info() = 0;
|
|
};
|
|
|
|
struct Fabrik {
|
|
|
|
virtual ~Fabrik() {}
|
|
|
|
virtual Produkt* erzeuge(string const&) = 0;
|
|
};
|
|
|
|
class KonkretesProdukt : public Produkt {
|
|
private:
|
|
|
|
string const _info;
|
|
public:
|
|
KonkretesProdukt(const string& i) : _info(i) {}
|
|
|
|
virtual string info() {return _info;}
|
|
};
|
|
|
|
|
|
class KonkreteFabrik : public Fabrik {
|
|
private:
|
|
vector<Produkt*> produkte;
|
|
public:
|
|
~KonkreteFabrik() {
|
|
|
|
for(Produkt* p : produkte) {
|
|
|
|
cout << "Lösche Produkt " << p->info() << endl;
|
|
|
|
delete p;
|
|
}
|
|
}
|
|
Produkt* erzeuge(const string& s) {
|
|
|
|
Produkt* newProduct = new KonkretesProdukt(s);
|
|
|
|
produkte.push_back(newProduct);
|
|
|
|
return newProduct;
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
Fabrik* fabrik = new KonkreteFabrik();
|
|
Produkt* p1 = fabrik->erzeuge("p1");
|
|
cout << "Erzeugtes Produkt: " << p1->info() << endl;
|
|
Produkt* p2 = fabrik->erzeuge("p2");
|
|
cout << "Erzeugtes Produkt: " << p2->info() << endl;
|
|
delete fabrik;
|
|
}
|
|
|
|
/*
|
|
Erwartete Ausgabe:
|
|
Erzeugtes Produkt: p1
|
|
Erzeugtes Produkt: p2
|
|
Lösche Produkt p1
|
|
Lösche Produkt p2
|
|
*/
|