Factory Method Pattern Components:
- Product: Report interface - defines the common interface for objects created by the factory.
- Concrete Product: HtmlReport class - implements the Product interface with specific functionality.
- Creator: ReportFactory abstract class - declares the factory method that returns Product objects.
- Concrete Creator: HtmlReportFactory class - implements the factory method to create specific Product instances.
┌────────────────────────────┐
│ <<interface>> │
│ Report │ ← Product
├────────────────────────────┤
│ + generate(String): String │
└────────────────────────────┘
△
│ implements
│
┌────────────────────────────┐
│ HtmlReport │ ← Concrete Product
├────────────────────────────┤
│ + generate(String): String │
└────────────────────────────┘
┌─────────────────────────┐
│ <<abstract>> │
│ ReportFactory │ ← Creator
├─────────────────────────┤
│ + createReport(): Report│
└─────────────────────────┘
△
│ extends
│
┌─────────────────────────┐
│ HtmlReportFactory │ ← Concrete Creator
├─────────────────────────┤
│ + createReport(): Report│
└─────────────────────────┘