【设计模式】工厂方法模式(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. 总结

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

相关推荐
JouJz4 分钟前
设计模式之单例模式:深入解析全局唯一对象的艺术
java·开发语言·spring·单例模式·设计模式·面试
DKPT20 分钟前
Java设计模式之行为型模式(命令模式)
java·笔记·学习·设计模式·命令模式
pe7er10 小时前
nuxtjs+git submodule的微前端有没有搞头
前端·设计模式·前端框架
极光雨雨12 小时前
【设计模式】单例模式 饿汉式单例与懒汉式单例
单例模式·设计模式
贱贱的剑15 小时前
2.单例模式
单例模式·设计模式
Your易元18 小时前
设计模式-模板方法模式
java·设计模式·模板方法模式
暴走的海鸽20 小时前
存储库模式赋能 Django:让你的代码不那么业余,更具生命力
python·设计模式·django
小张在编程1 天前
Java设计模式实战:备忘录模式与状态机模式的“状态管理”双雄
java·设计模式·备忘录模式
小小寂寞的城1 天前
JAVA观察者模式demo【设计模式系列】
java·观察者模式·设计模式
花好月圆春祺夏安2 天前
基于odoo17的设计模式详解---备忘模式
数据库·设计模式