工厂设计模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。这种模式通过使用一个工厂类来负责创建对象,而不是在客户端代码中直接实例化对象,从而降低了代码之间的耦合度。
在工厂设计模式中,通常有三种角色:
- 产品接口(Product):定义产品的公共接口。
- 具体产品(ConcreteProduct):实现产品接口的具体类。
- 工厂(Factory):负责创建产品对象的工厂类。
例:
java
// 产品接口
interface Shape {
void draw();
}
// 具体产品类:圆形
class Circle implements Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
// 具体产品类:矩形
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
// 具体产品类:正方形
class Square implements Shape {
@Override
public void draw() {
System.out.println("绘制正方形");
}
}
// 工厂类
class ShapeFactory {
// 根据传入的类型创建对应的产品对象
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
} else if (shapeType.equalsIgnoreCase("SQUARE")) {
return new Square();
}
return null;
}
}
// 主类,演示工厂模式的使用
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
// 获取圆形对象并调用其方法
Shape circle = shapeFactory.getShape("CIRCLE");
circle.draw();
// 获取矩形对象并调用其方法
Shape rectangle = shapeFactory.getShape("RECTANGLE");
rectangle.draw();
// 获取正方形对象并调用其方法
Shape square = shapeFactory.getShape("SQUARE");
square.draw();
}
}
在这个示例中:
- Shape 是产品接口,定义了所有形状都应该实现的 draw 方法。
- Circle、Rectangle 和 Square 是具体的产品类,实现了 Shape 接口。
- ShapeFactory 是工厂类,它有一个 getShape 方法,根据传入的形状类型参数创建并返回相应的形状对象。
- FactoryPatternDemo 是主类,演示了如何使用工厂类来创建不同类型的形状对象,而不需要直接实例化具体的形状类。
工厂设计模式的优点包括:
- 将对象的创建和使用分离,降低了代码之间的耦合度。
- 提高了代码的可维护性和可扩展性,当需要添加新的产品类时,只需要修改工厂类即可。
- 符合开闭原则,对扩展开放,对修改关闭。
工厂设计模式适用于以下场景: - 对象的创建过程比较复杂时。
- 根据不同的条件创建不同类型的对象时。
- 希望将对象的创建和使用分离时。