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


    什么是工厂模式

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

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

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

    第一步:定义形状接口

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

    1. public interface Shape {
    2. void draw();
    3. }

     

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

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

    1. public class Circle implements Shape {
    2. @Override
    3. public void draw() {
    4. System.out.println("Drawing a Circle");
    5. }
    6. }
    7. public class Rectangle implements Shape {
    8. @Override
    9. public void draw() {
    10. System.out.println("Drawing a Rectangle");
    11. }
    12. }
    13. public class Square implements Shape {
    14. @Override
    15. public void draw() {
    16. System.out.println("Drawing a Square");
    17. }
    18. }
    第三步:创建抽象工厂类

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

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

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

    1. public class CircleFactory extends ShapeFactory {
    2. @Override
    3. public Shape createShape() {
    4. return new Circle();
    5. }
    6. }
    7. public class RectangleFactory extends ShapeFactory {
    8. @Override
    9. public Shape createShape() {
    10. return new Rectangle();
    11. }
    12. }
    13. public class SquareFactory extends ShapeFactory {
    14. @Override
    15. public Shape createShape() {
    16. return new Square();
    17. }
    18. }
    第五步:使用工厂类创建形状对象

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

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

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

  • 相关阅读:
    实战篇之前端开发时,突破文字最小限制
    vue-template-compiler的作用
    TrajGAT:轨迹相似度计算模型
    谈云原生,不得不谈的容器
    离线数仓(7):数仓理论之数据仓库建模
    设计模式之命令模式
    基于SSM的摄影约拍系统
    【Python】模块与包的组织
    k3s 上的 kube-ovn 轻度体验
    Python学习基础笔记七十九——Socket编程2
  • 原文地址:https://blog.csdn.net/weixin_46520767/article/details/140423649