背景:
私は現在ゲームに取り組んでいます。このゲームでは、プレーヤーが操作できる椅子、テーブル、絵画など、いくつかの種類の家具があります。このために、GameObject
これらすべてのオブジェクトに共通するすべてのもの(描画、位置変数の保持など)を処理する抽象クラスを作成しました。家具には、幅と高さ(整数)、ユーザーが家具を操作することを選択したときに何が起こるかなど、いくつかの異なるパラメーターがあります(例:椅子->プレーヤーが近くにいる場合、座っている場合、テーブル->何もない、絵画->距離に関係なく調べる)。家具はメニューから作成でき、選択したピースのある種の識別子(現在は整数)を返します。
質問:
さまざまな家具をどのように実装すればよいですか?
1つの方法は、家具ごとにサブクラスを作成することです。しかし、これには2つの欠点があります。まず、その多くのクラスを管理するのは困難です。次に、家具を作成するときに、識別子に基づいてGameObjectの正しいサブクラスを作成する必要があります(フォローアップの質問を参照)。
私にとって最も論理的なオプションは、コンストラクターで幅と高さのパラメーターを受け取る一般的なクラスと、ユーザーがオブジェクトをクリックしたときに実行できる実行可能/その他のインターフェイスを作成することです。さまざまな値をデータベースに保存し、識別子に基づいて取得することもできますが、Runnablesを外部に保存できないため、さまざまなアクションで問題が発生し、ソリューション1と同じ問題が発生します。現在のオブジェクトに対して1つを選択する必要がある多くの異なるクラス。
フォローアップの質問: 家具の種類とアクションによっては、追加のメソッドを備えたより高度なサブクラスが必要になる可能性があります。その場合、前の質問の解決策に関係なく、識別子に応じて実装するものを選択するという問題が残ります。巨大なswitchステートメントを使用してさまざまなクラスをインスタンス化したくないので、これを回避する方法はありますか?
ゲームはAndroidプラットフォーム用ですが、将来のIOSポートがある可能性があるため、Java固有の回答は望ましくありませんが、許容できます。