//: C10:ProxyDemo.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Jednoduchá ukázka vzoru Proxy.
#include <iostream>
using namespace std;

class ProxyBase {
public:
  virtual void f() = 0;
  virtual void g() = 0;
  virtual void h() = 0;
  virtual ~ProxyBase() {}
};

class Implementace : public ProxyBase {
public:
  void f() { cout << "Implementace.f()" << endl; }
  void g() { cout << "Implementace.g()" << endl; }
  void h() { cout << "Implementace.h()" << endl; }
};

class Proxy : public ProxyBase {
  ProxyBase* implementace;
public:
  Proxy() { implementace = new Implementace(); }
  ~Proxy() { delete implementace; }
  // volání funkcí z implementace:
  void f() { implementace->f(); }
  void g() { implementace->g(); }
  void h() { implementace->h(); }
};

int main()  {
  Proxy p;
  p.f();
  p.g();
  p.h();
} ///:~
