を実装するために、自己のタイプを使用。戦略実装は、それらの戦略を使用するクラスの保護された/パブリックなメンバーにアクセスする必要があり、戦略を使用するクラスは戦略のパブリックメンバーにアクセスする必要があります。スカラ:私は状態を管理して、私が持っているクラスのための戦略パターンを実装しようとしてるの戦略パターン
私は本当にあたりの戦略異なるトップレベルのクラスを作成せずにこれを行う方法を見つけ出すことはできませんを除いて、この作業を持っています。次に例を示します。
class BranchState(a: String, b: Int) extends ABranchState(a, b) with QueuedStrat
class ABranchState(a: String, b: Int) {
this: ChainingStrategy =>
.... lots of impl ....
}
trait ChainingStrategy {
self: BranchState =>
... headers only, no impl ...
}
trait QueuedStrat extends ChainingStrategy {
self: BranchState =>
.... impl ....
}
trait AnotherStrat extends ChainingStrategy {
self: BranchState =>
.... impl ....
}
ここでの問題は、私が使用するAnotherStrat
でBranchStateをインスタンス化したい場合は、私は別のクラスを作成する必要があります。私は[T <: ChainingStrategy]
のようなBranchStateに型パラメーターを追加しようとしましたが、コンパイラーが(正当な理由で)私がChainingStrategy
のヘッダーの実装を持たなければならないと不満を表明するため、動作しません。 「連鎖戦略を実装するいくつかのタイプは、 IE:実装されていないメソッドはありません。
たぶんそれはしかし、ちょうど全く正しい方法ではありません。どうすればこれを達成できますか?
ありがとうございました
言語力学の点で面白いですが、デザインとしては複雑です。なぜ戦略は、戦略を使ってクラスについて知る必要がありますか?気分が悪い – Dici
はい、私はこれを整理する他の多くの方法について考えることができます。実際には同じパターンではなく、混乱していると思われるので、ここではそれらを "戦略"と呼んではいけません。私は主にこのメカニズムを働かせることに興味があります。 – Sushisource