【问题标题】:Is proxy a good fit to create demo mode?代理是否适合创建演示模式?
【发布时间】:2017-03-31 06:09:42
【问题描述】:

很多时候,我们在某些项目中需要演示模式,这些项目通常涉及硬件,目的是软件可以在没有实际连接硬件的情况下运行/模拟。演示模式下的功能在一定程度上模拟了硬件,但显然没有对其进行操作。

我的问题是,代理设计模式(或任何其他设计模式)是否适合在软件中创建演示模式?

考虑下面简化为简短的示例。

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

在上面的代码中,我为机器人创建了一个演示手臂和一个真实手臂,只是为了展示它们的工作原理。显然在真实演示模式下,所有派生对象都会有演示实现。这是在软件中实现演示模式的好方法吗?

这可以应用于真正的大/中型应用吗?我倾向于喜欢这种方法,因为在真实和演示应用程序中调用完全相同的函数,这使生活更轻松并理解流程。或者,一个单独的“演示”路径几乎可以变成一个单独的应用程序/模块,它会逐渐分散并失去与实际应用程序的密切相似性。

【问题讨论】:

  • 你的方法很好,但这不是代理模式,没有代理。
  • 也许一个更好的术语是依赖注入,见这里:stackoverflow.com/questions/5585436/…
  • @AlexeyGuseynov 是的,我认为它不完全是代理,但类设计有些相似。

标签: c++ design-patterns proxy-pattern


【解决方案1】:

是的,这看起来是个好方法。

除了设计之外,您还可以考虑创建机器人的抽象工厂类,它会创建正确的对象(演示类或真实类)。所以 main 函数的前 5 行最终会出现在工厂类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多