多くの場合、ハードウェアが実際に接続されていない状態で、ソフトウェアが実行/シミュレートできる目的で、ハードウェアに関連する特定のプロジェクトでデモモードが必要です。デモモードの機能は、ハードウェアをいくらかシミュレートしますが、明らかにそれを操作しません。プロキシはデモモードを作成するのに適していますか?
私の質問は、プロキシデザインのパターン(またはその点については他のもの)は、ソフトウェアでデモモードを作成するのに適していますか?
簡略化して簡略化した以下の例を考えてみましょう。
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つ作成しました。明らかに実際のデモモードでは、すべての派生オブジェクトにデモ実装が行われます。これはソフトウェアでデモモードを実装する良い方法ですか?
これは実際の大/中型アプリケーションに適用できますか?実際のアプリケーションとデモアプリケーションの両方で、まったく同じ関数が呼び出されるので、このアプローチが気に入っています。あるいは、別個の「デモ」パスは、ほとんど離れたアプリケーション/モジュールになり、実際のアプリケーションではすぐに使い分けられなくなります。
あなたのアプローチは問題ありませんが、これはプロキシパターンではありません。プロキシはありません。 –
多分もっと良い言葉は依存性注入でしょうか、ここを見てください:http://stackoverflow.com/questions/5585436/using-interface-in-c-for-dependency-injection – marcinj
@AlexeyGuseynovはい私はそれが正確にプロキシではないと思ったが、やや似たようなクラスデザイン。 – zar