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