Factory method pattern example
public interface Animal {
<T> T create(Class<T> responseClass);
}
public class AnimalFactory implements Animal {
@Override
public <T> T create(Class<T> responseClass) {
try {
return responseClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new IllegalArgumentException(e);
}
}
}
public class Cat {
public Dog catSound() {
System.out.println("Meow");
return new Dog();
}
}
public class Dog {
public void dogSound() {
System.out.println("Wof");
}
}
public class App {
public static void main(String[] args) {
Animal animal = new AnimalFactory();
Cat cat = animal.create(Cat.class);
cat.catSound();
Dog dog = animal.create(Dog.class);
dog.dogSound();
}
}