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

什么是工厂模式?

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

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

让我们通过一个简单的示例来理解工厂模式。假设我们需要创建不同类型的形状对象,比如圆形(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. 复杂性:相对于简单工厂模式,工厂模式的结构更复杂,需要额外定义工厂类。
总结

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

相关推荐

  1. 设计模式工厂模式

    2024-07-15 14:32:02       64 阅读
  2. 设计模式--工厂模式

    2024-07-15 14:32:02       48 阅读
  3. 设计模式 工厂模式

    2024-07-15 14:32:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 14:32:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 14:32:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 14:32:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 14:32:02       69 阅读

热门阅读

  1. Windows图形界面(GUI)-SDK-C/C++ - 组合框(ComboBox)

    2024-07-15 14:32:02       24 阅读
  2. vue3实现一个接球小游戏

    2024-07-15 14:32:02       18 阅读
  3. 安装 MySQL与修改配置流程

    2024-07-15 14:32:02       19 阅读
  4. html dialog不显示边框

    2024-07-15 14:32:02       24 阅读
  5. conda

    2024-07-15 14:32:02       26 阅读
  6. 代码随想录算法训练营第三十二天

    2024-07-15 14:32:02       26 阅读
  7. 【并发编程】CPU & IO 密集型

    2024-07-15 14:32:02       18 阅读
  8. python中逻辑运算符and 和 or 的优先级问题。

    2024-07-15 14:32:02       21 阅读