当我使用Java(或类似语言)进行编程时,我经常使用一个简单版本的Strategy模式,使用接口和实现类来为代码中的特定概念提供运行时可选实现。更好的替代战略模式在斯卡拉?
作为一个非常人为的例子,我可能想要一个动物的一般概念,它可以在我的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代码中是否有更实用的方式来实现战略模式 - 或类似的东西 - 这样我就可以在运行时选择一个抽象概念的具体实现。或者正在使用特质来达到这个目的?
优秀点。我专注于复制策略模式,并忘记提出功能替代方案。一个真的必须写关于4的设计模式和Scala书的博客。 :-) – 2011-02-09 21:45:45
@Daniel啊! “4本书”实际上是四人帮!带我了解了一点点...... – pedrofurla 2011-02-10 00:17:31