воскресенье, 9 февраля 2014 г.

Мост(Bridge Body/Head)

Идея: Отделить интерфейс от реализации. Это достигается за счет того, что реализация инкапсулируется в отдельную сущность(Body). Интерфейс к реализации обращается с помощью указателя на эту сущность. По реализации очень похож на стратегию.

#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

class Body
{
public:
virtual ~Body() {}
virtual void print() = 0;
};


class Printf : public Body
{
public:
virtual void print()
{
printf("You are using 'printf' implementation\n");
}
};

class Cout : public Body
{
public:
virtual void print()
{
cout << "You are using 'cout' implementation" << endl;
}
};

class Head
{
public:
Head(const string& pattern)
{
if (pattern == "printf")  //Для того, что бы подставить нужную реализацию
impl = new Printf;    //я криво сделал условия. Было б куда лучше, если
else if (pattern == "cout") // использовалась абстрактная фабрика, которая
impl = new Cout; // сама создавала нужную реализацию
else
impl = 0;
}

void print () {if (impl) impl->print(); }

private:
Body* impl;
};

int main()
{
string bridge;
cin >> bridge;
Head head(bridge);
head.print();
return 0;
}

Комментариев нет:

Отправить комментарий