设计模式--工厂设计模式

什么是工厂模式?

工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。这样,工厂方法模式让类的实例化延迟到子类。通过工厂方法模式,我们可以在不修改现有代码的情况下引入新的产品类,从而实现更好的扩展性和可维护性。

示例:创建不同类型的形状对象

让我们通过一个简单的示例来理解工厂模式。假设我们需要创建不同类型的形状对象,比如圆形(Circle)、矩形(Rectangle)和正方形(Square)。

第一步:定义形状接口

首先,我们定义一个形状接口(Shape),所有具体的形状类都实现这个接口。

public interface Shape {
    void draw();
}

 

第二步:创建具体的形状类

接下来,我们创建实现 Shape 接口的具体形状类,例如 CircleRectangleSquare

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

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

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a Square");
    }
}
第三步:创建抽象工厂类

我们创建一个抽象工厂类(ShapeFactory),定义一个工厂方法 createShape,由子类实现具体的创建逻辑。

public abstract class ShapeFactory {
    public abstract Shape createShape();
}
第四步:创建具体工厂类

然后,我们为每种形状创建对应的工厂类,实现工厂方法 createShape

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

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

public class SquareFactory extends ShapeFactory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}
第五步:使用工厂类创建形状对象

最后,我们在客户端代码中使用具体的工厂类来创建不同的形状对象。

public class Client {
    public static void main(String[] args) {
        ShapeFactory circleFactory = new CircleFactory();
        Shape shape1 = circleFactory.createShape();
        shape1.draw();

        ShapeFactory rectangleFactory = new RectangleFactory();
        Shape shape2 = rectangleFactory.createShape();
        shape2.draw();

        ShapeFactory squareFactory = new SquareFactory();
        Shape shape3 = squareFactory.createShape();
        shape3.draw();
    }
}
工厂模式的优点
  1. 解耦:工厂模式将对象的创建和使用解耦,客户端代码不需要知道具体类名,只需与工厂类和接口/抽象类交互。
  2. 扩展性:添加新类型的产品类时,只需增加相应的具体工厂类,无需修改现有代码,符合开闭原则(Open/Closed Principle)。
  3. 灵活性:通过工厂方法的重载或重写,可以灵活地控制对象创建的过程。
工厂模式的缺点
  1. 类的数量增加:每增加一种产品类,都需要增加相应的具体工厂类,导致类的数量增加。
  2. 复杂性:相对于简单工厂模式,工厂模式的结构更复杂,需要额外定义工厂类。
总结

工厂模式通过定义创建对象的接口,将对象的实例化延迟到子类,从而实现了解耦和扩展性。尽管其结构相对复杂,但在需要灵活创建对象且可能频繁变更的场景中,工厂模式是一种非常有用的设计模式。希望通过这个示例,你能更好地理解和应用工厂模式,让你的代码更加优雅和高效。

上一篇:人工智能算法工程师(中级)课程11-PyTorch神经网络之循环神经网络RNN与代码详解-六、PyTorch框架搭建RNN网络的