这种工厂模式, 相比是比较正宗的

package com.ainy.myinterface{
    public interface IAnimal{
        function eat( $food : String = "") : void;
    }
}

实例 - > 继承 IAnimal

package com.ainy.animals{
    import com.ainy.myinterface.IAnimal;
    public class Dog implements IAnimal{
        public function Dog(){
            eat("Gt");
        }
        public function eat($food:String = "" ):void{
            trace("Dog eat "+$food);
        }
        public function ss() : void{
            trace("Dog eat  ssss");
        }
    }
}

另一个实例

package com.ainy.animals{
    import com.ainy.myinterface.IAnimal;
    public class Cat implements IAnimal{
        private static var $instance : Cat;
        public static function instance() : Cat{
            if( null == $instance ){
                $instance = new Cat();
            }
            return $instance;
        }
        public function Cat(){
            if($instance != null ){
                throw new Error("Cat 被设计成为了 单例!!!");
            }else{
                $instance = this;
            }
        }
        public function eat($food:String=""):void{
            trace("Cat eat " + $food);
        }
    }
}

工厂类接口->

package com.ainy.myinterface{
    public interface IAnimalFactory{
        function getAnimal() : IAnimal;
    }
}

应用 代码 ->

//var dogF : IAnimalFactory = new DogFactory();
//dogF.getAnimal();
var catF : IAnimalFactory = new CatFactory();
catF.getAnimal().eat("XXX");

此方案 IAnimal 一定要设计的非常的好, 因为 dogF.getAnimal()根本无法调用ss方法,及木法调用IAnimal里面没有声明的方法.逻辑有些复杂, 但是 对于 后续开发 应该 比上一种方案简单.