エージェントのコレクションをモデリングしているとします。これらのエージェントは、PlayerまたはBotによって制御されます。さらに、各エージェントには、エクスプローラやエンジニアなどの役割があります。すべてのロールは同じ共通アクションを共有しますが、それぞれのアクションは少し異なる方法で実装されることがあります。理想的には、agentInstance.move()を呼び出すことができ、アクションは役割に応じて再生されます。多くの実装セットの1つをオブジェクトに接続するにはどうすればよいですか?
私はこれをしばらくモデル化する方法に取り組んでおり、具体的にはStrategyとTemplateのパターンを調べましたが、必要なものかどうかはわかりません。
1つのアイデアは、抽象エージェントのPlayerおよびBotサブクラスを作成し、エクスプローラおよびエンジニアの抽象的な役割のサブクラスを作成することです。次に、各エージェントに役割が割り当てられます。しかし、それは私がこのようなコマンド、例えばagentInstance.getRole().move()
をパススルーするか、agentInstance.move(){ this.role.move(); }
のようなヘルパー関数を作成しなければならないことを暗示しているようです。
私も自分のデザインがビットインタフェース欠損することができることを承知しているので、私はその後、エージェントによって継承されるデフォルトの実装でインターフェースとサブインターフェースとしての役割をモデリングすると考えられ、それは感じています問題を探している解決策のように。
だから、これをモデリングするにはどうすればよいでしょうか?決定にはどのような考慮事項が必要ですか?特にJava 8のインタフェースと抽象クラスがどれほど似ているのか?
- 必要性に関するあなたの考えは "トンネル"()agent.role.move経由でコマンドを何ですか?それは私のように実際には汚いのではないですか? –
多義性を使うのがポイントなので、私にとっては受け入れられます。しかし、Player/BotがagentInstance.move()を呼び出さなければならない場合は、より良いでしょう。次に、Agent.Move()内でRole.Move()を呼び出すなどして、Move()ビヘイビアーをエージェントの役割に委譲します。そのエージェントに与える役割によって、それは異なって動くでしょう。しかし、それは主にあなたがモデリングしているビジネスに依存しています。 –