工厂模式是一种创建对象的设计模式,它提供了一种创建对象的接口,但是具体的对象实例化的逻辑由工厂类来决定。
工厂模式的主要目的是将对象的创建与使用分离,使代码更加灵活、可扩展和可维护。
在工厂模式中,通常包含以下角色:
- 抽象产品(Abstract Product):定义了产品的通用接口或抽象类。
- 具体产品(Concrete Product):实现了抽象产品接口的具体类,也就是需要被创建的实际对象。
- 抽象工厂(Abstract Factory):定义了创建产品的接口方法。
- 具体工厂(Concrete 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("绘制矩形");
}
}
// 抽象工厂
interface ShapeFactory {
Shape createShape();
}
// 具体工厂
class CircleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
class RectangleFactory implements ShapeFactory {
@Override
public Shape createShape() {
return new Rectangle();
}
}
// 客户端代码
public class Main {
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();
}
}
在上述示例中,我们定义了抽象产品 Shape
,具体产品 Circle
和 Rectangle
实现了该接口。然后,我们定义了抽象工厂 ShapeFactory
,具体工厂 CircleFactory
和 RectangleFactory
分别实现了抽象工厂接口。最后,在客户端代码中,我们通过具体工厂来创建具体产品。
工厂模式通过引入抽象工厂和具体工厂,将对象的创建和使用解耦,使得系统更加灵活、可扩展和可维护。