简单工厂
优点:
1.职责分工,提供了专门创建对象的工厂类;
2.创建者无需知道创建产品名称,减轻使用者的记忆;
3.不用修改其他业务逻辑代码,少量修改工厂创建方法的代码,即可新增产品创建类型,提高系统灵活性;
缺点:
1.简单的工厂使用的是静态方法,无法继承,可测试较低,增加mock成本;
2.一旦产品类型非常多的时候,简单工厂类的创建产品的方法就变得难以维护(所以,简单工厂模式一般只使用产品类型较少的时候使用);
适用场景:
1.工厂类创建对象比较少;
2.客户只知道传入工厂类的参数,对于如何具体创建不关心;
工厂方法模式
优点:
1.把原先集中在简单工厂类的创建流程分离到具体的自雷中;
2.在客户与产品之间,多了一层衔接层。客户不需要知道对应需要创建的产品类型,只需要对应的工厂类型即可;
3.当需要新增产品的时候,不需要修改原有业务代码逻辑,通过新增即可达成目的;
缺点:
1.新增一款产品,需要同时新增产品与其对应的产品创建工厂,一旦产品数量增加就会有大量的对应关系;
适用场景:
1.一个类不需要知道他所需要的对象的类;(拿到父类,通过特定的标志,即可使用到子类的特征,java常用,php 无,弱类型语言)
2.一个类通过其子类来指定创建哪个对象;
3.将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中;