Подходит ли прокси для создания демонстрационного режима?

Много раз нам нужен демонстрационный режим в определенных проектах, который обычно включает аппаратное обеспечение с целью, чтобы программное обеспечение могло работать / моделироваться без фактически подключенного оборудования. Функции в демонстрационном режиме в некоторой степени имитируют аппаратное обеспечение, но явно не работают с ним.

Мой вопрос заключается в том, подходит ли шаблон проектирования прокси (или любой другой в этом отношении) для создания демонстрационных режимов в программном обеспечении?

Рассмотрим приведенный ниже пример, который упрощен, чтобы быть кратким.

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;
}

В приведенном выше коде я создал одну демонстрационную руку и одну реальную руку для робота, чтобы показать, как каждая из них будет работать. Очевидно, что в реальном демонстрационном режиме все производные объекты будут иметь демонстрационную реализацию. Это хороший способ реализовать демонстрационные режимы в программном обеспечении?

Может ли это быть применено к реальным приложениям большого / среднего размера? Мне нравится этот подход, потому что в реальных и демонстрационных приложениях вызываются одни и те же функции, что облегчает жизнь и помогает понять процесс. В качестве альтернативы отдельный «демонстрационный» путь может стать почти отдельным приложением / модулем, который разрастается и теряет близкое сходство с реальным приложением.

1

Решение

Да, это выглядит как хороший подход.

Кроме того, что вы можете рассмотреть помимо своего дизайна, это абстрактный фабричный класс, создающий робота, который создает правильные объекты (демонстрационные или реальные классы). Таким образом, первые 5 строк основной функции окажутся в фабричном классе.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]