4

既存のコードをあまり変更する必要がない、ゲーム用の簡単に拡張できるアイテムシステムを設計したいと思います。その場で新しい効果のあるアイテムを追加したい。

私のアイテムに共通する特徴:

名前、説明、NPC販売価格、装備できる場合、必要なレベル、戦闘で使用できる場合、戦闘外で使用できる場合、クールダウン

だから私はこれをすでにクラスにカプセル化することができます。しかし、今ではアイテム効果があります。

例:回復xヘルスポイント、回復xマナポイント、デバフxの削除、バフxの追加、装備時にxステータスポイントを与える、装備時にx%の確率で他の効果を作成するなど。

そして、それらは次のように組み合わせることができます:ヒールxヘルスとマナポイント。最初の4つは使用可能なアイテムが持つことができる効果の例であり、最後の2つは装備可能なアイテムが持つことができる効果の例です。

その背後にある考え方は、データベースにもこの構造があり、データベースに新しい効果の組み合わせで新しいアイテムを追加できることです。コードはこれを読み取り、新しいファンシーアイテムにまとめます。多くを変更します。コードを変更する必要があるのは、明らかに新しいエフェクトを追加するときだけです。

これをどのようにデザインパターンにまとめますか?

デコレータを考えました。これには別のより良いデザインパターンがありますか、それとも複数のデザインパターンの組み合わせがありますか?

4

3 に答える 3

2

デコレータパターンはあなたのニーズに適しているようです。トップスの異なるピザを考えてみてください。基本的なピザを多くのトップスでワープし、最後に関数を呼び出して賞金などを合計することができます。これは一種のラッパーであり、オブジェクトを次のクラスに渡します。したがって、必要なのは基本クラスのみで、必要なときに新しい(トップ)クラスを追加できます。

于 2012-11-10T13:50:54.890 に答える
2

デコレータパターンを使用すると、オブジェクトを変更せずに、追加の機能でオブジェクトを装飾できます。

于 2012-11-10T13:49:56.547 に答える
0

これはあなたの質問に対する直接の答えではありませんが、コメントに収まるよりも多くの単語が必要だと思います。

コードのチャンクのデザインパターンを選択することは、通常、事前に行うことではありません(このように行う場合は、動作を確認した後で変更する準備をしてください)。これは、作業コードがすでに配置されていて、リファクタリングを検討している場合に実行する可能性が高いものです。-コードを書き始めると、現在行う決定は多くの(現在)未知の要因の影響を受ける可能性があります。

作成したい機能、動作、機能についてもっと考えてから、コードを書き始めて、何が機能するかを確認し、アイデアをさらに発展させることをお勧めします。「factory」、「decorator」、「visitor」などの流行語を中心に事前に設計して問題を解決しようとしても、解決策にたどり着かない可能性があります。設計は、継続的な改善、変更、洗練。

余談ですが、特にオブジェクト指向デザインについては、コードを作成する際にSOLIDの原則について慎重に検討してください。彼らはあなたがリファクタリングに来るときにあなたが決定を下すのを助けるべきです

http://www.blackwasp.co.uk/SOLIDPrinciples.aspx

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

于 2012-11-10T13:55:37.487 に答える