Universität Paderborn - Home Universität Paderborn
Die Universität der Informationsgesellschaft

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