少し前に XNA/C# (ゲーム エンジン) のようなものを使用していたときに、オブジェクトにコンポーネントを追加するだけで追加の機能が得られることに気付きました。例えば:
クラス Spaceshipには、 Collidable、Gravity、Controlsなどのコンポーネントがあります...
通常、これらのコンポーネントは IUpdatable/IDrawable インターフェイスまたは DrawableGameComponent などを実装します。
更新/描画またはその他の「イベント」になると、それらのイベントを持つすべてのコンポーネントが呼び出され、オブザーバーパターンを思い浮かべます。しかし、これらの関数はメイン クラスを「装飾」しているように見えます。
これは既知のパターンですか?それはなんと呼ばれていますか?これは、ゲーム開発以外で使用するのに適したパターンですか? 私が JavaScript にタグを付けた理由は、JS でこのようなことをしようと考えていたからです。
次のようになります。
function Watcher() {
this.components = [];
this.update() = function() {
for (component in this.components) {
if (typeof component.update === "function") {
component.update();
}
}
};
}
function Component() {
this.update = function() {
};
}
function Wiggle(obj) {
_.extend(this, Component.prototype);
this.obj = obj;
this.wiggled = false;
this.update = function() {
if (this.wiggled) {
this.obj.x -= 1;
} else {
this.obj.x += 1;
}
wiggled = !wiggled;
};
}
function Car() {
this.x = 0;
_.extend(this, Watcher.prototype);
this.components.push(new Wiggle(this));
}
その後、イベントがトリガーされ、すべての車のコンポーネントが更新されます。