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
和两个实现类BMW
和Audi
。然后,我们创建了一个工厂类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
和两个实现类BMW
和Audi
。然后,我们创建了一个工厂接口CarFactory
和两个实现类BMWFactory
和AudiFactory
。每个工厂类都负责创建一种类型的Car
对象。最后,我们在Main
类中使用工厂类来创建对象,并调用对象的方法。
工厂方法模式的优点是遵循开闭原则,当需要添加新的产品时,只需要添加对应的工厂类即可。但