Open for extention, close for implementation
Member variable, input parameters and return value
- Iterator interface -> Video abstract class (abstract product)
- iterator() in Collection interface -> VideoFactory abstract class
- iterator() in ArrayList class (implements Collection) -> JavaVideoFactory class
- Itr class in ArrayList implements Iterator -> JavaVideo class (actual product)
- URLStreamHandlerFactory interface -> VideoFactory
- Factory in Launcher.class -> JavaVideoFactory
- URLStreamHandler abstract class -> Video
- use reflection Class.forName(actual class path) -> JavaVideo