简单工厂模式概述

简单工厂模式是一种常见的设计模式,它属于创造型模式。简单工厂模式提供了一个简单工厂类,它将客户端的请求转化为合适的类的实例对象,从而实现类的实例化。简单工厂模式的核心思想是将对象的创建过程封装起来,客户端只关注如何使用该对象,而无需了解其创建过程。这种模式虽然简单,但非常实用。

Java示例

假设我们需要创建一个汽车,它可以是奔驰、宝马、奥迪等类型的汽车,同时我们需要这些汽车都具有统一的属性和方法。我们可以首先定义一个Car接口:

public interface Car {
    void drive();
}

然后,我们可以定义具体的汽车类MercedesBenz、BMW和Audi,实现Car接口:

public class MercedesBenz implements Car {
    public void drive() {
        System.out.println("Driving Mercedes Benz");
    }
}
public class BMW implements Car {
    public void drive() {
        System.out.println("Driving BMW");
    }
}
public class Audi implements Car {
    public void drive() {
        System.out.println("Driving Audi");
    }
}

接着,我们定义一个工厂类CarFactory,它负责根据用户的需求来创建适当的具体汽车类的实例对象。具体的实现方式是根据传入参数来选择具体的汽车类:

public class CarFactory {
    public static Car createCar(String carType) {
        if (carType.equalsIgnoreCase("MercedesBenz")) {
            return new MercedesBenz();
        } else if (carType.equalsIgnoreCase("BMW")) {
            return new BMW();
        } else if (carType.equalsIgnoreCase("Audi")) {
            return new Audi();
        } else {
            throw new IllegalArgumentException("Unsupported car type: " + carType);
        }
    }
}

最后,在客户端代码中,我们可以使用工厂类的静态方法createCar来创建具体汽车类的实例对象,而无需了解具体汽车类的创建过程:

Car car = CarFactory.createCar("MercedesBenz");
car.drive();

这样就完成了简单工厂模式的Java演示。

优点和缺点

优点:

  1. 将对象创建过程封装在工厂方法中,可以减少代码重复,提高代码的可维护性和可扩展性;
  2. 工厂类可以专注于对象的创建,避免了客户端代码中过多的对象创建和管理。
  3. 通过工厂类生成实例,可以对创建出的对象进行统一的管理,在增加或修改该对象的属性或方法时,只需修改工厂类即可。

缺点:

  1. 当需要增加一个新的产品时,需要修改工厂类代码,如果产品较多,会导致工厂类变得庞大和复杂。
  2. 在工厂类中增加新的产品时,需要修改工厂类的代码,容易违反“开闭原则”。
  3. 简单工厂模式构建了工厂和产品的直接关系,工厂类职责过重,会导致代码可维护性和可扩展性的下降。

总之,简单工厂模式作为创建型模式,可以很好的解耦客户端和具体实现类之间的关系,同时它对于相同的产品具有拓展性,能够方便的添加新产品。虽然模式本身比较简单,但在具体的使用时仍需要遵循相应的规范和要求。