Why do we need monitor class?

I understand the functionality of monitor class, but the same functionality can be implemented in driver class as well i.e analysis_port. One can argue what if I want to reuse the same monitor and not the driver i.e passive agent. I can implement the passive agent logic in my driver class as well.
So what are the other reasons to implement a separate monitor class?

In reply to ak_verifsj:

It’s to force you into a practice known as Separation of Concerns. If you start out putting the driver and monitor functionalities together, it may become much more difficult later on to make it work passively.