Challenge: Visitor Pattern
In this challenge, you have to implement the visitor pattern to solve the given problem.
We'll cover the following
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
Song
object.
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!
class RockMusicVisitor{//write your code herevisit(){}}class Song{//write your code heregetName(){}getGenre(){}}class MusicLibrary{//write your code hereaddSong(){}accept(){}}
Let’s discuss the solution in the next lesson.