My suggested interface (My apologies for not including the image in my answer, but I'm a new user)
I think it's best to avoid repeating the same task for a number of days. In most cases, restaurants would pick a range of days to apply their opening hours to (usually two ranges: weekdays and weekends).
The interface I propose resembles the opening hours displayed on a restaurant window, and offers the flexibility to add a single or a range of days.
Extra shifts can also be added under the range of days. The first shift cannot be deleted (because at least one shift has to be included), but additional rows will have a delete button next to them.
The interaction would be either horizontal scrolling with the mouse or with the left and right arrows on the keyboard (both will be enabled). The minute increments can be in 15 minutes or either 00 or 30, depending on the flexibility required.
If all the days are selected within the first range (e.g. Mon - Sun), then the additional day range will not appear (and you can display "Every Day" in the opening hours).
I'm not entirely sure what the required flexibility for the public holidays is, but I added a feature to select the public holidays the restaurant will be closed in.
If something about the interface or the interaction is unclear, please feel free to ask. :)