工厂模式(Factory Pattern)

85 阅读2分钟

工厂模式(Factory Pattern)

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需向客户端暴露创建逻辑。 简单来说,工厂模式就是封装创建对象的代码,提供一个统一的接口来创建不同类型的对象。工厂模式的关键在于,将对象的实例化过程交给子类来完成,而不是在父类中直接实例化对象。由于子类可以根据需要重写父类的方法来创建对象,因此工厂模式实现了“开放-封闭”原则。

以下是一个Java工厂模式的示例代码:

1.创建一个接口

public interface Shape {
    void draw();
}

2.实现接口

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }
}
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Square::draw() method.");
    }
}
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Inside Circle::draw() method.");
    }
}

3.创建工厂类

public 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;
    }
}

4.测试

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();
         // 获取 Circle 的对象,并调用它的 draw 方法
        Shape shape1 = shapeFactory.getShape("CIRCLE");
         // 调用 Circle 的 draw 方法
        shape1.draw();
         // 获取 Rectangle 的对象,并调用它的 draw 方法
        Shape shape2 = shapeFactory.getShape("RECTANGLE");
         // 调用 Rectangle 的 draw 方法
        shape2.draw();
         // 获取 Square 的对象,并调用它的 draw 方法
        Shape shape3 = shapeFactory.getShape("SQUARE");
         // 调用 Square 的 draw 方法
        shape3.draw();
    }
}

输出结果:

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.

通过工厂模式,我们可以通过工厂类创建对象,而无需直接从客户端调用构造函数。这种方法将实例化对象的过程封装在工厂方法中,并且根据指定的参数返回正确类型的对象。由于工厂方法为创建对象提供了一个接口,因此我们可以轻松地添加或更改类型的对象而不必更改客户端。

以上内容来自于chatgpt,特此记录,以便学习。