Java工厂模式总结

工厂模式是一种常见的设计模式,它用于创建对象,但是不需要直接暴露对象的创建逻辑。在Java中,工厂模式有很多不同的实现方式,包括简单工厂模式、工厂方法模式和抽象工厂模式。本文将对这些实现方式进行总结,并提供相应的代码示例。

简单工厂模式

简单工厂模式是最基本的工厂模式,它通过一个工厂类来创建对象。工厂类根据不同的参数或条件来创建不同的对象。简单工厂模式适用于对象的创建逻辑相对简单,但是需要隐藏创建细节的情况。

下面是一个使用简单工厂模式的示例代码:

// 创建一个接口
public interface Car {
    void drive();
}

// 创建不同的实现类
public class BMW implements Car {
    @Override
    public void drive() {
        System.out.println("Driving BMW");
    }
}

public class Audi implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Audi");
    }
}

// 创建工厂类
public class CarFactory {
    public static Car createCar(String brand) {
        if (brand.equalsIgnoreCase("BMW")) {
            return new BMW();
        } else if (brand.equalsIgnoreCase("Audi")) {
            return new Audi();
        } else {
            throw new IllegalArgumentException("Invalid car brand");
        }
    }
}

// 使用工厂类创建对象
public class Main {
    public static void main(String[] args) {
        Car bmw = CarFactory.createCar("BMW");
        bmw.drive();
        
        Car audi = CarFactory.createCar("Audi");
        audi.drive();
    }
}

在上面的示例中,我们定义了一个接口Car和两个实现类BMWAudi。然后,我们创建了一个工厂类CarFactory,其中的createCar方法根据参数创建不同的Car对象。最后,我们在Main类中使用工厂类来创建对象,并调用对象的方法。

简单工厂模式的优点是隐藏对象的创建细节,客户端只需要知道如何使用工厂类即可。但是缺点是当需要添加新的产品时,需要修改工厂类的代码,违反了开闭原则。

工厂方法模式

工厂方法模式是对简单工厂模式的改进,它将对象的创建委托给子类来实现。每个子类都可以创建一种类型的对象。工厂方法模式遵循了开闭原则,但是需要多个类来实现。

下面是一个使用工厂方法模式的示例代码:

// 创建一个接口
public interface Car {
    void drive();
}

// 创建不同的实现类
public class BMW implements Car {
    @Override
    public void drive() {
        System.out.println("Driving BMW");
    }
}

public class Audi implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Audi");
    }
}

// 创建工厂接口
public interface CarFactory {
    Car createCar();
}

// 创建不同的工厂类
public class BMWFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new BMW();
    }
}

public class AudiFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new Audi();
    }
}

// 使用工厂类创建对象
public class Main {
    public static void main(String[] args) {
        CarFactory bmwFactory = new BMWFactory();
        Car bmw = bmwFactory.createCar();
        bmw.drive();
        
        CarFactory audiFactory = new AudiFactory();
        Car audi = audiFactory.createCar();
        audi.drive();
    }
}

在上面的示例中,我们定义了一个接口Car和两个实现类BMWAudi。然后,我们创建了一个工厂接口CarFactory和两个实现类BMWFactoryAudiFactory。每个工厂类都负责创建一种类型的Car对象。最后,我们在Main类中使用工厂类来创建对象,并调用对象的方法。

工厂方法模式的优点是遵循开闭原则,当需要添加新的产品时,只需要添加对应的工厂类即可。但