私はJava(または似たような言語)でプログラミングしていますが、インタフェースと実装クラスを使用して簡単なバージョンの戦略パターンを使用して、コードで特定のコンセプトの実行時に選択可能な実装を提供します。Scalaの戦略パターンの代わりの方が良いでしょうか?
非常に工夫した例として、私はJavaコードでノイズを発生させることができ、実行時に動物の種類を選択できるようにするための一般的な概念を持つことができます。だから私はこれらの行に沿ってコードを書くだろう:
interface Animal {
void makeNoise();
}
class Cat extends Animal {
void makeNoise() { System.out.println("Meow"); }
}
class Dog extends Animal {
void makeNoise() { System.out.println("Woof"); }
}
class AnimalContainer {
Animal myAnimal;
AnimalContainer(String whichOne) {
if (whichOne.equals("Cat"))
myAnimal = new Cat();
else
myAnimal = new Dog();
}
void doAnimalStuff() {
...
// Time for the animal to make a noise
myAnimal.makeNoise();
...
}
シンプルで十分です。最近、私はScalaのプロジェクトに取り組んできましたが、私は同じことをしたいと思います。 - 特性とのインタフェースは本当にでないことは言うまでもありません
trait Animal {
def makeNoise:Unit
}
class Cat extends Animal {
override def makeNoise:Unit = println("Meow")
}
class AnimalContainer {
val myAnimal:Animal = new Cat
...
}
はしかし、これは非常に機能的に非常にJavaに似ないようだ:それはこのようなもので、この使用して特性を行うのは簡単に十分なようです同じこと。だから私は実行時に抽象的なコンセプトの具体的な実装を選択できるように、私のScalaコードでStrategyパターン(またはそのようなもの)を実装するための慣用的な方法があるのだろうかと思っています。それとも、これを達成するための最良の方法を形質を使用していますか?
Daniel!ありがとう、ダニエル!これは既存のコード(機能よりもOOです)に似ているためです。@ VonCの回答も素晴らしいですし、もっと機能的なコードベース。 – MattK