【设计模式】工厂方法模式(Factory Method Pattern)

目录标题

  • 工厂方法设计模式详解
    • [1. 介绍](#1. 介绍)
    • [2. 结构](#2. 结构)
    • [3. 实现步骤](#3. 实现步骤)
      • [3.1 创建抽象产品接口](#3.1 创建抽象产品接口)
      • [3.2 创建具体产品类](#3.2 创建具体产品类)
      • [3.3 创建抽象工厂接口](#3.3 创建抽象工厂接口)
      • [3.4 创建具体工厂类](#3.4 创建具体工厂类)
      • [3.5 客户端使用](#3.5 客户端使用)
    • [4. 好处与优点](#4. 好处与优点)
    • [5. 坏处与缺点](#5. 坏处与缺点)
    • [6. 适用场景](#6. 适用场景)
    • [7. 总结](#7. 总结)

工厂方法设计模式详解

1. 介绍

工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。这样,工厂方法模式让一个类的实例化延迟到其子类。在Java中,工厂方法模式经常用于创建对象,使得客户端代码不需要直接依赖具体的类,而是依赖于接口或抽象类。

2. 结构

工厂方法模式的主要结构包括以下几个角色:

  • 抽象产品(Product):定义产品的接口,是具体产品类的父类或者是接口。
  • 具体产品(ConcreteProduct):实现抽象产品接口,是工厂方法模式中具体创建的对象。
  • 抽象工厂(Creator):定义一个创建产品对象的方法,返回一个抽象产品对象。
  • 具体工厂(ConcreteCreator):实现抽象工厂接口,具体负责创建具体产品对象。

3. 实现步骤

下面以一个简单的示例来说明工厂方法模式的实现过程,假设我们有一个形状(Shape)接口和两个具体形状类:圆形(Circle)和正方形(Square)。

3.1 创建抽象产品接口

java 复制代码
// Shape.java
public interface Shape {
    void draw();
}

3.2 创建具体产品类

java 复制代码
// Circle.java
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("画一个圆形");
    }
}

// Square.java
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("画一个正方形");
    }
}

3.3 创建抽象工厂接口

java 复制代码
// ShapeFactory.java
public interface ShapeFactory {
    Shape createShape();
}

3.4 创建具体工厂类

java 复制代码
// CircleFactory.java
public class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Circle();
    }
}

// SquareFactory.java
public class SquareFactory implements ShapeFactory {
    @Override
    public Shape createShape() {
        return new Square();
    }
}

3.5 客户端使用

java 复制代码
// Client.java
public class Client {
    public static void main(String[] args) {
        ShapeFactory circleFactory = new CircleFactory();
        Shape circle = circleFactory.createShape();
        circle.draw();
        
        ShapeFactory squareFactory = new SquareFactory();
        Shape square = squareFactory.createShape();
        square.draw();
    }
}

4. 好处与优点

松耦合:工厂方法模式将客户端代码与具体产品的实现分离,使得客户端不需要知道具体产品的类名,只需关注抽象产品和工厂接口。

扩展性强 :通过新增具体工厂和产品类,可以轻松扩展系统,符合开闭原则。

符合单一职责原则:每个具体工厂只负责创建一种具体产品,符合单一职责原则。

5. 坏处与缺点

类数量增多:每个具体产品都需要对应一个具体工厂,当产品种类较多时,类的数量会增加。

增加系统复杂度:引入了更多的类和接口,增加了系统的复杂度,适用于较复杂的场景。

6. 适用场景

工厂方法模式适用于以下场景:

  1. 当一个类不知道它所需要的对象的类时,可以使用工厂方法模式,让子类决定创建的具体对象。
  2. 当一个类希望由它的子类来指定它所创建的对象时,可以使用工厂方法模式。

7. 总结

工厂方法模式是一种常见且实用的设计模式,通过定义工厂接口和具体工厂类,将对象的创建延迟到子类中实现,从而提高了代码的灵活性和扩展性。在设计系统时,根据具体需求选择合适的设计模式能够提高代码的可维护性和可扩展性。

相关推荐
J_liaty28 分钟前
23种设计模式一代理模式
设计模式·代理模式
苏渡苇7 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
短剑重铸之日8 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
feasibility.8 小时前
AI 编程助手进阶指南:从 Claude Code 到 OpenCode 的工程化经验总结
人工智能·经验分享·设计模式·自动化·agi·skills·opencode
BD_Marathon9 小时前
七大设计原则介绍
设计模式
YigAin11 小时前
Unity23种设计模式之 享元模式
设计模式·享元模式
范纹杉想快点毕业1 天前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
茂桑1 天前
DDD领域驱动设计-基础设施层
设计模式·架构
小温冲冲1 天前
通俗且全面精讲工厂设计模式
设计模式
进击的小头1 天前
设计模式与C语言高级特性的结合
c语言·设计模式