タグ付けされた質問 「delegation」

1
コード設計:任意の関数の委任
PPCGでは、King of the Hillの課題が頻繁に発生します。これは、異なるコードボットを互いに対戦させるものです。これらの課題を単一の言語に限定するのは好きではないため、標準のI / Oを介してクロスプラットフォームの通信を行います。 私の目標は、チャレンジライターがこれらのチャレンジをより簡単に書くために使用できるフレームワークを書くことです。次の要件を満たしました。 チャレンジライターは、メソッドが個別の通信のそれぞれを表すクラスを作成できます。たとえば、私たちのGood vs Evilチャレンジでは、ライターはメソッドを含むPlayerクラスを作成abstract boolean vote(List<List<Boolean>> history)します。 コントローラは、前述のメソッドが呼び出されたときに標準I / Oを介して通信する上記のクラスのインスタンスを提供できます。ただし、上記のクラスのすべてのインスタンスが標準I / Oを介して通信する必要があるとは限りません。ボットのうち3つはネイティブJavaボットである可能性があります(Player別の2つが別の言語である場合、クラスをオーバーライドするだけです)。 メソッドは常に同じ数の引数を持つわけではありません(また、常に戻り値を持つこともありません)。 チャレンジライターが私のフレームワークで作業するためにできる限り少ない作業を行う必要があります。 私はこれらの問題を解決するために反射を使用することに反対していません。私はチャレンジライターに次のようなことを要求することを検討しました: class PlayerComm extends Player { private Communicator communicator; public PlayerComm(Communicator communicator){ this.communicator = communicator; } @Override boolean vote(List<List<Boolean>> history){ return (Boolean)communicator.sendMessage(history); } } しかし、いくつかの方法がある場合、これはかなり繰り返しになる可能性があり、定数のキャストは楽しいものではありません。(sendMessageこの例では、可変数のObject引数を受け入れ、を返しますObject) これを行うより良い方法はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.