Return different object types based on state (e.g., `CreatedDownload`, `ActiveDownload`, `PausedDownload`) with only valid methods. - `CREATED`: start(), cancel() - `IN_PROGRESS`: pause(), cancel() - `PAUSED`: resume(), cancel() - `CANCELLED`: - - `COMPLETED`: -