JAVA 设计模式 工厂

发布于:2025-07-15 ⋅ 阅读:(17) ⋅ 点赞:(0)
工厂设计模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。这种模式通过使用一个工厂类来负责创建对象,而不是在客户端代码中直接实例化对象,从而降低了代码之间的耦合度。
在工厂设计模式中,通常有三种角色:
  • 产品接口(Product):定义产品的公共接口。
  • 具体产品(ConcreteProduct):实现产品接口的具体类。
  • 工厂(Factory):负责创建产品对象的工厂类。
例:
// 产品接口
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();
    }
}
在这个示例中:
  1. Shape 是产品接口,定义了所有形状都应该实现的 draw 方法。
  2. Circle、Rectangle 和 Square 是具体的产品类,实现了 Shape 接口。
  3. ShapeFactory 是工厂类,它有一个 getShape 方法,根据传入的形状类型参数创建并返回相应的形状对象。
  4. FactoryPatternDemo 是主类,演示了如何使用工厂类来创建不同类型的形状对象,而不需要直接实例化具体的形状类。
工厂设计模式的优点包括:
  • 将对象的创建和使用分离,降低了代码之间的耦合度。
  • 提高了代码的可维护性和可扩展性,当需要添加新的产品类时,只需要修改工厂类即可。
  • 符合开闭原则,对扩展开放,对修改关闭。
工厂设计模式适用于以下场景:
  • 对象的创建过程比较复杂时。
  • 根据不同的条件创建不同类型的对象时。
  • 希望将对象的创建和使用分离时。

网站公告

今日签到

点亮在社区的每一天
去签到