Objektorientierte Programmierung WS 2013/2014 - Datei restaurant-loes.cc
#include <iostream>
// Product
class Mahlzeit {
};
// Concrete Product
class Pizza : public Mahlzeit {
public:
Pizza() {
std::cout << "Pizza gebacken." << std::endl;
}
};
// Concrete Product
class WokGericht : public Mahlzeit {
public:
WokGericht(const char* zutaten) {
std::cout << "Wok-Gericht zubereitet." << std::endl;
std::cout << "Mit " << zutaten << "." << std::endl;
}
};
// Creator
class Restaurant {
protected:
Mahlzeit* mahlzeit;
// Die abstrakte Factory-Methode, die von Erzeugern implementiert werden muss.
virtual void bereiteMahlzeitZu() = 0;
virtual void nimmBestellungAuf() {
std::cout << "Ihre Bestellung bitte!" << std::endl;
}
virtual void serviereMahlzeit() {
std::cout << "Hier Ihre Mahlzeit. Guten Appetit!" << std::endl;
}
public:
// Diese Methode benutzt die Factory-Methode.
void liefereMahlzeit() {
nimmBestellungAuf();
bereiteMahlzeitZu(); // Aufruf der Factory-Methode
serviereMahlzeit();
}
};
// Concrete Creator für konkretes Produkt "Pizza"
class Pizzeria : public Restaurant {
public:
// Implementierung der abstrakten Methode der Oberklasse
virtual void bereiteMahlzeitZu() {
mahlzeit = new Pizza();
}
};
// Concrete Creator für konkretes Produkt "WokGericht"
class ChinaImbiss : public Restaurant {
public:
// Implementierung der abstrakten Methode der Oberklasse
virtual void bereiteMahlzeitZu() {
mahlzeit = new WokGericht("Pilzen, Zwiebeln und Bambus");
}
};
int main() {
Pizzeria daToni;
daToni.liefereMahlzeit();
ChinaImbiss wokToGo;
wokToGo.liefereMahlzeit();
}
Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 20.12.2013


