South Africa is a large and diverse country and there are lots of different types of holidays you can have while there. So it does depend what you're looking for.
Cape Town is a vibrant and fun city, with great beaches, amazing food, incredible views. Shopping and nightlife is good, but there's also load of outdoor things you can do. Or you can spend just days lying on a beach.
If in Cape Town, and you have the time and inclination, visiting Franschoek or Stellenbosch to visit the winelands is a great option.
If you want to see wildlife, there are multiple amazing places to go on safari, depending on time of year, budget etc.
If you want something a little more chilled, you can travel up the garden route (east) or go up the west coast from Cape Town to one or more of the many beach towns.
If you are going on Safari, while many people don't choose Johannesburg for a holiday, I think a day or two in Joburg is interesting. It's a modern, exciting African city and has its own options for a "city break", including the Apartheid Museum and some incredible food, art, shopping and entertainment options.