【设计模式】抽象工厂模式(Abstract Factory Pattern)

目录标题

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

抽象工厂设计模式详解

1. 介绍

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或依赖对象的接口,而无需指定它们具体的类。抽象工厂模式与工厂方法模式相比,不仅仅是针对单一产品的创建,而是针对产品族的创建,即相关联的产品组合。

2. 结构

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

  • 抽象工厂(AbstractFactory):声明一组用于创建一系列产品对象的方法,每个方法对应一个具体产品组合。
  • 具体工厂(ConcreteFactory):实现抽象工厂接口,负责创建具体产品对象。
  • 抽象产品(AbstractProduct):声明一组产品对象的接口。
  • 具体产品(ConcreteProduct):实现抽象产品接口,是工厂方法模式中具体创建的对象。

3. 实现步骤

下面以一个简单的示例来说明抽象工厂模式的实现过程,假设我们有两种类型的产品族:形状(Shape)和颜色(Color),每种产品族有对应的两种具体产品。

3.1 创建抽象产品接口

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

// Color.java
public interface Color {
    void fill();
}

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("画一个正方形");
    }
}

// Red.java
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("填充红色");
    }
}

// Blue.java
public class Blue implements Color {
    @Override
    public void fill() {
        System.out.println("填充蓝色");
    }
}

3.3 创建抽象工厂接口

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

3.4 创建具体工厂类

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

    @Override
    public Color createColor() {
        return new Red();
    }
}

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

    @Override
    public Color createColor() {
        return new Blue();
    }
}

3.5 客户端使用

java 复制代码
// Client.java
public class Client {
    public static void main(String[] args) {
        AbstractFactory shapeFactory = new ShapeFactory();
        Shape shape = shapeFactory.createShape();
        Color color = shapeFactory.createColor();
        shape.draw();
        color.fill();
        
        AbstractFactory colorFactory = new ColorFactory();
        Shape shape2 = colorFactory.createShape();
        Color color2 = colorFactory.createColor();
        shape2.draw();
        color2.fill();
    }
}

4. 好处与优点

  • 产品族一致性:抽象工厂模式能够确保所创建的产品都属于同一产品族,保证了产品之间的兼容性。
  • 易于替换:由于具体工厂负责创建一整个产品族,所以可以轻松地替换整个产品族,而无需修改客户端代码。
  • 符合单一职责原则:每个具体工厂只负责创建一种产品族,符合单一职责原则。

5. 坏处与缺点

难以扩展新的产品族:抽象工厂模式在增加新的产品族时,需要修改抽象工厂接口及所有具体工厂类,对系统的扩展性有一定影响。

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

6. 适用场景

抽象工厂模式适用于以下场景:

  • 需要创建一系列相关或依赖对象的产品族,并希望这些产品族之间保持一致性。
  • 系统有多个产品族,但每次只使用其中一个产品族。
  • 客户端不依赖于产品的创建细节,只关心产品的接口。

7. 总结

抽象工厂模式是一种常见且实用的设计模式,通过提供一组相关产品的创建接口,保证了产品族的一致性,同时也降低了客户端与具体产品的耦合度。在设计系统时,根据具体需求选择合适的设计模式能够提高代码的可维护性和可扩展性。

相关推荐
结衣结衣.5 分钟前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
茫茫人海一粒沙8 分钟前
Python 代码编写规范
开发语言·python
林浩2339 分钟前
Python——异常处理机制
python
数据分析螺丝钉35 分钟前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
小蜗笔记1 小时前
在Python中实现多目标优化问题(7)模拟退火算法的调用
开发语言·python·模拟退火算法
TANGLONG2221 小时前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
魏大橙2 小时前
Fastjson反序列化
开发语言·python
立黄昏粥可温2 小时前
Python 从入门到实战34(实例2:绘制蟒蛇)
开发语言·python
柚乐果果2 小时前
数据分析实战简例
java·大数据·python
luthane2 小时前
python 实现djb2哈希算法
python·算法·哈希算法