抽象工厂模式

1 概念

1 定义

在工厂父类定义一个创建对象的接口,而工厂子类则负责生成一组相关的对象。这些对象之间通常有某种关联或依赖关系。

抽象工厂模式适用于需要创建多个相关对象并确保它们之间的一致性的情况。

2 应用场景

  • 客户端不依赖某个产品实例具体如何创建
  • 强调一系列相关的产品对象一起创建使用

3 优缺点

优点:

  • 用户只需要关心产品所需工厂,无需关心创建细节

  • 将一个系列的产品族统一到一起创建:抽象工厂模式通过一组相关的工厂类来创建一系列相关或依赖的对象,确保了这些对象之间的一致性。这意味着创建的对象是相互配合、一起使用的,能够满足特定的需求或目标。

缺点:

  • 产品族中扩展新的产品困难
  • 增加了系统的抽象性和理解难度

产品族是指一组相关联或依赖的产品,它们在功能、特性或目标上具有一定的相似性或关联性。产品族通常由多个具体产品组成,每个具体产品属于同一个产品族。

举例来说,假设有一个汽车制造系统,其中包含了多个产品族:轿车产品族、SUV产品族和卡车产品族。每个产品族包含了各自的具体产品,如轿车产品族可能包含了轿车的具体型号(如小型轿车、中型轿车、豪华轿车等),SUV产品族可能包含了SUV的具体型号(如紧凑型SUV、中型SUV、全尺寸SUV等)

2 代码实现

场景: 不同的课程,配置的博客和视频都是不一样的

1
2
3
4
5
6
/**
* 博客
*/
public abstract class Article {
public abstract void produce();
}
1
2
3
4
5
6
public class JavaArticle extends Article {
@Override
public void produce() {
System.out.println("编写Java课程博客");
}
}
1
2
3
4
5
6
public class PythonArticle extends Article {
@Override
public void produce() {
System.out.println("编写Python课程博客");
}
}
1
2
3
4
5
6
/**
* 视频
*/
public abstract class Video {
public abstract void produce();
}
1
2
3
4
5
6
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("录制Java课程视频");
}
}
1
2
3
4
5
6
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("录制Python课程视频");
}
}
1
2
3
4
5
6
7
/**
* 课程工厂接口,创建不同课程的视频和博客
*/
public interface CourseFactory {
Video getVideo();
Article getArticle();
}
1
2
3
4
5
6
7
8
9
10
11
public class JavaCourseFactory implements CourseFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}

@Override
public Article getArticle() {
return new JavaArticle();
}
}
1
2
3
4
5
6
7
8
9
10
11
public class PythonCourseFactory implements CourseFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}

@Override
public Article getArticle() {
return new PythonArticle();
}
}
1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) {
CourseFactory courseFactory = new JavaCourseFactory();
Video video = courseFactory.getVideo();
Article article = courseFactory.getArticle();
video.produce();
article.produce();
}
}

输出:

录制Java课程视频
编写Java课程博客


抽象工厂模式
http://example.com/抽象工厂模式/
作者
Panyurou
发布于
2023年10月5日
许可协议