當我使用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