欢迎访问宙启技术站
智能推送

Java中的设计模式之工厂函数模式

发布时间:2023-07-06 03:20:10

工厂函数模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种将对象的创建和使用分离的方式。该模式通过定义一个创建对象的工厂接口,让具体的子类决定实例化哪一个类,从而将对象的创建逻辑和使用逻辑解耦。

在Java中,使用工厂函数模式可以实现面向接口的编程,将具体的实现类的创建过程封装在工厂类中,客户端只需要通过工厂类来获取所需的具体对象,无需知道具体对象的创建逻辑。

工厂函数模式的主要角色包括:

1. 抽象产品(Product):定义了产品的接口,所有具体产品都必须实现该接口。

2. 具体产品(Concrete Product):实现了抽象产品定义的接口,是工厂方法模式的创建目标。

3. 抽象工厂(Creator):声明一个工厂方法,该方法返回一个抽象产品类型的对象。

4. 具体工厂(Concrete Creator):实现抽象工厂接口,负责实例化具体产品对象。

下面以一个简单的图形绘制工具为例,来演示工厂函数模式的使用。

首先,我们定义一个抽象产品接口Shape,其中包含一个绘制方法draw():

public interface Shape {
    void draw();
}

然后,定义具体产品类Circle和Rectangle,实现Shape接口:

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw Circle");
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw Rectangle");
    }
}

接下来,定义一个抽象工厂接口ShapeFactory,在其中声明一个工厂方法createShape():

public interface ShapeFactory {
    Shape createShape();
}

最后,我们可以实现具体工厂类CircleFactory和RectangleFactory,分别用于创建Circle和Rectangle对象:

public class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

public class RectangleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Rectangle();
    }
}

这样,客户端就可以通过抽象工厂ShapeFactory来实例化具体对象,而无需关心具体对象的创建过程:

public class Client {
    public static void main(String[] args) {
        ShapeFactory circleFactory = new CircleFactory();
        Shape circle = circleFactory.createShape();
        circle.draw();
        
        ShapeFactory rectangleFactory = new RectangleFactory();
        Shape rectangle = rectangleFactory.createShape();
        rectangle.draw();
    }
}

通过工厂函数模式,我们可以实现客户端和具体产品的解耦,方便扩展和替换具体产品。当需要增加新的具体产品时,只需要实现抽象产品接口并创建相应的具体工厂类即可,而无需修改客户端的代码。

总之,工厂函数模式是一种实现对象创建和使用分离的设计模式,适用于需要创建多种类型对象的场景。它通过定义抽象工厂和具体工厂来封装对象的创建逻辑,并通过抽象产品和具体产品来实现面向接口的编程。在Java中,工厂函数模式被广泛应用于各种类库和框架中。