Why Widget

Can anyone explain why to create widget, what are the advantages of creating widget over renderPartial.

What are advantages of different methods provided by widget class like run, init, end