The problem Factory Method solves
Your reporting service exports finished reports. It started with one format, so ReportJob.run() ended with new PdfExporter().export(rows) and everybody was happy.
Then finance wanted CSV. So run() grew an if. Then analytics wanted XLSX, and someone needed JSON for a webhook. Now the one method that is supposed to run a report contains a four-branch conditional about file formats, imports four exporter classes, and has to be re-tested every time a fifth arrives.
The real damage is the direction of the dependency: a high-level orchestration class knows the name of every low-level detail class in the system. Add a format, edit the orchestrator. That's backwards.
