Dardo - Tentando entender o valor do construtor 'factory'

Se estou entendendo corretamente:

"A factory constructor affords an abstract class to be 
    instantiated by another class, despite being abstract." 

Como exemplo:

abstract class Animal {
   String makeNoise(String sound);
   String chooseColor(String color);
   factory Animal() => new Cat(); 
}

class Cat implements Animal {
   String makeNoise(String noise) => noise;
   String chooseColor(color) => color;
}

O exposto acima me permite fazer isso:

Cat cat = new Animal();
var catSound = cat.makeNoise('Meow');
var catColor = cat.chooseColor('black');
print(catSound); // Meow

E isso também me impede de fazer isso:

class Dog implements Animal {
 int age;
 String makeNoise(String noise) => noise;
 String chooseColor(color) => color;
}

Dog dog = new Animal(); // <-- Not allowed because of the factory constructor

Então, se estou correto com tudo isso, sou levado a perguntar por que o código extra para Animal?

Se você pretende usar um construtor de fábrica para animais, que cria apenas gatos, por que não apenas ter uma classe Cat com os métodos / propriedades necessários?

Ou, é o objetivo da classe Animal com um construtor de fábrica como acima,realmente uma interface projetada especificamente apenas para a classe Cat?

questionAnswers(3)

yourAnswerToTheQuestion