Used to create instances of families of related or dependant objects, based on platform or app state.
Can simplify if-else hell
class AudioPlayerFactory {
AudioPlayer createAudioPlayer() {
if (Platform.isIOS) {
return ClosedSourceAudioPlayer();
} else {
return OpenSourceAudioPlayer();
}
}
}