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课程博客