Здравствуйте!
Ситуация: Есть много устройств, которые могут выполнять различные команды. Некоторые комманды у некоторых устройств одинаковые, а есть такие у которых все команды уникальны (т.е. нет аналогичных команд у других устройств).
Задача: надо это смоделировать. Хотел сделать так:
абстрактный базовый класс AbstractDevice, от которого наследуются остальные классы конкретных устройств. Но для того, чтобы запросить сформировать команду getCommandFoo у ConcretDevice1 необходимо, чтобы в AbstractDevice была виртуальная функция getCommandFoo. Таким образом получается, что в AbstractDevice должны быть для всех устройств все функции, которые формируют команды — это как-то неприемлемо.
Какой есть альтернативный вариант?
Может быть как-то так можно:
class AbstractDevice
{
public:
command getCommand(int t);
}
class ConcretDevice1 : public AbstractDevice
{
public:
namespace СommandTypes {enum Type{com1, com2}};
command getCommand(int t);
}
А клиент делает:
AbstractDevice *device = new
device->getCommand(ConcreteDevice1::commandTypes::com2); //преобразование ConcreteDevice1::СommandTypes::Type в int;
Обращаться к конкретному классу устройства клиент будет через указатель на AbstractDevice.
Может есть какие-нибудь красивые решения?