很多时候我们需要在某些项目中使用演示模式,这些项目通常涉及硬件,其目的是软件可以在没有硬件实际连接的情况下运行/模拟。演示模式下的功能在某种程度上模拟了硬件,但显然不能对其进行操作。
我的问题是,代理设计模式(或任何其他问题)是否适合在软件中创建演示模式?
考虑下面的例子,简化为简短。
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;
}
在上面的代码中,我为机器人创建了一个演示臂和一个真臂,以显示每个机器人的工作方式。显然,在实际演示模式下,所有派生对象都将具有演示实现。这是在软件中实现演示模式的好方法吗?
这可以应用于真正的大/中型应用吗?我倾向于喜欢这种方法,因为在真实应用程序和演示应用程序中都会调用完全相同的函数,这使得生活更轻松并且理解流程另外,一个单独的演示&#39;路径几乎可以成为一个单独的应用程序/模块,它与实际应用程序分开并失去密切关注。
答案 0 :(得分:0)
是的,这看起来是一个很好的方法。
您可以在设计之外考虑的是创建机器人的抽象工厂类,它创建正确的对象(演示或真实类)。所以main函数的前5行最终会出现在工厂类中。