Factory method pattern

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();
    }
}