Комбинациии интерфейсов
От: Barbar1an Украина  
Дата: 27.07.18 09:48
Оценка:
//много простых интерфейсов, как завещали отцы
class IInterface;
class IAlpha : public IInterface;
class IBeta : public IInterface;
class IGamma : public IInterface;
class IDelta : public IInterface;

// имплементаторы разных комбинаций простых интерфейсов
class AB : IAlpha, IBeta{};
class ABG : IAlpha, IBeta, IGamma{};
class BGD : IBeta, IGamma, IDelta{};
class AD : IAlpha, IDelta{};


//теперь нам нужен класс который будет понимать любые входные комбинации

class Worker
{
    // указываем явно что нам нужно, но из такой сигнатуры создается впечатление что параметры это разные объекты, что не прикольно
    Do0(IAlpha, IBeta);
    Do1(IAlpha, IBeta, IGamma);
    Do2(IBeta, IGamma, IDelta);
    Do3(IGamma, IDelta);
};

class Worker
{
    // передаем один объект, но не ясно что он должен имплементить, тоже хренова
    Do0(IInterface i)
    {
        auto a = dynamic_cast<IAlpha *>(i);
        auto a = dynamic_cast<IBeta *>(i);
    }
    Do1(IInterface);
    Do2(IInterface);
    Do3(IInterface)
    {
        auto g = dynamic_cast<IGamma *>(i);
        auto d = dynamic_cast<IDelta *>(i);
    }
};

// такое тоже не хочется делать, создавать интерфейс ради одного класса которые  использует такию комбинацию
class IAlphaBeta : IAlpha, IBeta{};


class Worker
{
    Do0(IAlphaBeta i){}
};



всё — некрасиво
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 27.07.2018 9:54 Barbar1an . Предыдущая версия . Еще …
Отредактировано 27.07.2018 9:54 Barbar1an . Предыдущая версия .
Отредактировано 27.07.2018 9:48 Barbar1an . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.