1.概念
由多个不同的工厂来替我们完成生产对象的操作,不同的工厂生产不同的对象
2.作用
不再会违背OCP原则,要添加新的产品类会相应添加对应的工厂类,不会修改到已有工厂的代码。
调用者不再关心产品的创建,实现职责分离
3.应用场景
对象的创建步骤比较复杂,可以用工厂来进行封装。
希望隐藏对象创建的具体实现
需要解耦对象的使用和创建过程
4.特点
对象的创建与使用代码解耦
使用工厂来获取对象,而不是构造器
5.类与对象关系
5.1类图
5.2说明
在工厂模式中我们会有四种角色:
- 抽象产品:所有具体产品的接口,决定这些产品共有的特性或行为
- 具体产品:具体的产品,就是我们客户端实际要使用的对象
- 抽象工厂:所有工厂类的接口
- 具体工厂:每个具体产品都有对应的具体工厂类
6.实现
// 抽象产品类
interface Vehicle {
void drive();
}
// 具体产品类:汽车
class Car implements Vehicle {
@Override
public void drive() {
System.out.println("Driving a car.");
}
}
// 具体产品类:自行车
class Bicycle implements Vehicle {
@Override
public void drive() {
System.out.println("Riding a bicycle.");
}
}
// 工厂类
class VehicleFactory {
// 根据类型创建对应的交通工具对象
public static Vehicle createVehicle(String type) {
if (type.equals("car")) {
return new Car();
} else if (type.equals("bicycle")) {
return new Bicycle();
} else {
throw new IllegalArgumentException("Unknown vehicle type: " + type);
}
}
}
// 客户端代码
public class FactoryPatternDemo {
public static void main(String[] args) {
Vehicle car = VehicleFactory.createVehicle("car");
car.drive();
Vehicle bicycle = VehicleFactory.createVehicle("bicycle");
bicycle.drive();
}
}