有人可以简单的说明如何可能地向我解释访客模式的目的与例子 [英] Could someone in simple terms explain to me the visitor pattern's purpose with examples if possible
问题描述
提前感谢
..
class MusicLibrary {
private Set< Music> collection ...
public Set< Music> getPopMusic(){...}
public Set< Music> getRockMusic(){...}
public Set< Music> getElectronicaMusic(){...}
}
然后你意识到你想能够通过其他类型过滤库的集合。您可以继续添加新的吸气剂方法。或者您可以使用访问者。
界面访问者< T> {
visit(Set< T> items);
}
界面MusicVisitor扩展Visitor< Music> ;;
class MusicLibrary {
private Set< Music>收集...
public void accept(MusicVisitor visitor){
visitor.visit(this.collection);
}
}
class RockMusicVisitor实现MusicVisitor {
private final Set< Music> picks = ...
public visit(Set< Music> items){...}
public Set< Music> getRockMusic(){return this.picks; }
}
class AmbientMusicVisitor实现MusicVisitor {
private final Set< Music> picks = ...
public visit(Set< Music> items){...}
public Set< Music> getAmbientMusic(){return this.picks; }
}
将数据与算法分开。您将算法卸载到访问者实现。您可以通过创建更多访问者来添加功能,而不是不断修改(并膨胀)持有数据的类。
I'm really confused about the visitor pattern and its uses. I can't really seem to visualize the benefits of using this pattern or its purpose. If someone could explain with examples if possible that would be great. =)
Thanks in advance
Once upon a time...
class MusicLibrary {
private Set<Music> collection ...
public Set<Music> getPopMusic() { ... }
public Set<Music> getRockMusic() { ... }
public Set<Music> getElectronicaMusic() { ... }
}
Then you realize you'd like to be able to filter the library's collection by other genres. You could keep adding new getter methods. Or you could use Visitors.
interface Visitor<T> {
visit(Set<T> items);
}
interface MusicVisitor extends Visitor<Music>;
class MusicLibrary {
private Set<Music> collection ...
public void accept(MusicVisitor visitor) {
visitor.visit( this.collection );
}
}
class RockMusicVisitor implements MusicVisitor {
private final Set<Music> picks = ...
public visit(Set<Music> items) { ... }
public Set<Music> getRockMusic() { return this.picks; }
}
class AmbientMusicVisitor implements MusicVisitor {
private final Set<Music> picks = ...
public visit(Set<Music> items) { ... }
public Set<Music> getAmbientMusic() { return this.picks; }
}
You separate the data from the algorithm. You offload the algorithm to visitor implementations. You add functionality by creating more visitors, instead of constantly modifying (and bloating) the class that holds the data.
这篇关于有人可以简单的说明如何可能地向我解释访客模式的目的与例子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!