Много раз нам нужен демонстрационный режим в определенных проектах, которые обычно включают аппаратное обеспечение, с целью, чтобы программное обеспечение могло работать/моделировать без фактического подключения аппаратного обеспечения. Функции в демонстрационном режиме несколько имитируют аппаратное обеспечение, но явно не работают с ним.
Мой вопрос: подходит ли шаблон прокси (или любой другой) для создания демонстрационных режимов в программном обеспечении?
Рассмотрим приведенный ниже пример, который упрощен до краткости.
class Arm
{
public:
int _x = 0;
int _y = 0;
virtual void move(int x, int y) = 0;
};
class RobotArm : public Arm
{
virtual void move(int x, int y)
{
/* assum we have actual hardware coommands here which updates variables */
//_x = x;
//_y = y;
std::cout << "hardware is not connected, can't move" << std::endl;
}
};
class RobotArmDemo : public Arm
{
virtual void move(int x, int y)
{
/* no hardware commands here, just update variables */
_x = x;
_y = y;
std::cout << "Demo Arm moved to " << _x << "," << _y << std::endl;
}
};
class Robot
{
public:
Arm *leftArm;
Arm *rightArm;
};
int main()
{
Arm * leftArm = new RobotArmDemo; // creating an arm in demo mode!
Arm * rightArm = new RobotArm; // this arm is the real one
Robot * robot = new Robot;
robot->leftArm = leftArm;
robot->rightArm = rightArm;
// perform action
robot->leftArm->move(3, 3); // this is on demo mode
robot->rightArm->move(1, 2); // this is real mode
return 0;
}
В приведенном выше коде я создал одну демонстрационную руку и одну реальную руку для робота, чтобы показать, как каждая из них будет работать. Очевидно, что в реальном демонстрационном режиме все производные объекты будут иметь демонстрационную реализацию. Это хороший способ реализовать демонстрационные режимы в программном обеспечении?
Можно ли это применить к реальному приложению большого/среднего размера? Мне нравится такой подход, потому что и в реальных, и в демо-приложениях вызываются одни и те же функции, что упрощает жизнь и позволяет лучше понять процесс. В качестве альтернативы отдельный «демо» путь может стать почти отдельным приложением/модулем, который разрастается и теряет близкое сходство с реальным приложением.