工厂模式

工厂模式的目的是提供一个通用的接口来创建对象,而不需要客户端了解具体的实现细节。该模式适用于需要动态生成对象的场景,如Web应用中的对象池管理。

在Java中实现工厂模式通常涉及到创建一个工厂类,该类负责创建其他类的实例。工厂模式主要用于创建对象的场景,特别是在对象的创建逻辑比较复杂时。下面将通过一个简单的例子来说明如何在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.");
    }
}

3、创建工厂类

public class ShapeFactory {
    
    // 使用 getShape 方法获取形状类型的对象
    public Shape getShape(String shapeType){
        if(shapeType == null){
            return null;
        }        
        if(shapeType.equalsIgnoreCase("Square")){
            return new Square();
        } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
            return new Rectangle();
        }         
        return null;
    }
}

4、使用工厂类来获取对象并调用其draw方法

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

在这个例子中,ShapeFactory类是工厂类,它有一个getShape方法,这个方法根据传入的形状类型字符串来返回相应形状的实例。客户端代码(在这个例子中是FactoryPatternDemo类)通过调用工厂类的getShape方法来获取形状对象,而不需要直接使用new关键字来实例化具体的形状类。这种模式提高了代码的可维护性和扩展性,因为你可以很容易地添加新的形状类而不需要修改工厂类或客户端代码。