Changed AbstractFactory (abstract class to interface)