Challenge: Visitor Pattern
In this challenge, you have to implement the visitor pattern to solve the given problem.
Problem statement
In this challenge, you need to implement the visitor pattern to separate Rock music from the other genres of music by creating a separate playlist. You need to implement the RockMusicVisitor class for this purpose. As you can see, it contains the visit method; this should return the rock music playlist.
Note: the rock music playlist only needs to contain the names of the songs, not the entire
Songobject.
Next, you need to implement a Song class. A Song object will have the following properties: name and genre. You also need to define the two functions: getName and getGenre.
Lastly, you need to implement the MusicLibrary class. It should store a list of all the songs regardless of the genres. You need to implement the addSong function to add a song and accept function to allow the RockMusicVisitor to visit the music library.
Input
The accept function is called with RockMusicVisitor as a parameter
Output
A playlist containing names of all the rock songs from the library is returned.
Sample input
var rockMusicVisitor = new RockMusicVisitor()
var song1 = new Song("Bohemian Rhapsody","Rock")
var song2 = new Song("Stair way to Heaven","Rock")
var song3 = new Song("Opps I did it again", "Pop")
var song4 = new Song("Crazy", "Country")
var musicLibrary = new MusicLibrary()
musicLibrary.addSong(song1)
musicLibrary.addSong(song2)
musicLibrary.addSong(song3)
musicLibrary.addSong(song4)
console.log(musicLibrary.accept(rockMusicVisitor))
Sample output
["Bohemian Rhapsody","Stair way to Heaven"]
Challenge #
Take a close look and design a step-by-step solution before jumping on to the implementation. This problem is designed for your practice, so try to solve it on your own first. If you get stuck, you can always refer to the solution provided. Good Luck!
Let’s discuss the solution in the next lesson.