工厂模式有哪几种?简单工厂、工厂方法、抽象工厂的区别与适用场景?