设计模式---【抽象工厂模式】

xiaoxiao2025-10-14  5

目录

前言

一、定义

二、优缺点

二、代码

三、UML类图


前言

此文章记录自己所学,不对之处欢迎纠正。文中有些字段、图片通过书籍摘抄而来,非常感谢原作者。

一、定义

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。每一个具体工厂都提供了多个工厂方法创建多种不同类型的产品,这些产品构成了一个产品族。

产品等级结构:如有一个接口是课程,继承此接口的类有java课程、python课程、前端课程。抽象课程是课程接口(父类),具体课程(子类)是java课程、Python课程等等。这时,抽象课程与具体课程构成了一个产品等级结构。产品族:指由同一个工厂生产的。如java课程工厂生产java视频、java手记;Java视频位于视频产品等级结构中,java手记位于手记产品等级结构中。java视频、java手记位于一个产品族。

二、优缺点

优点 增加新的产品族非常方便,无须修改现有系统,符合开闭原则。 缺点 增加新的产品等级结构非常麻烦,需要修改原有系统。

二、代码

1.产品相关类

/** * 抽象视频接口 */ public interface Video { /** 生产视频方法 */ void produce(); } /** * 生产java视频【具体类】 */ public class JavaVideo implements Video { @Override public void produce() { System.out.println("录制java课程视频"); } } /** * 生产Python视频类【具体类】 */ public class PythonVideo implements Video { @Override public void produce() { System.out.println("录制Python视频"); } } /** * 手记抽象接口 */ public interface Article { void produce(); } /** * 生产java手记类【具体类】 */ public class JavaArticle implements Article { @Override public void produce() { System.out.println("编写java手记"); } } /** * 生产Python视频类【具体类】 */ public class PythonArticle implements Article { @Override public void produce() { System.out.println("编写Python手记"); } }

2.工厂相关类

/** * 课程抽象接口 * 课程由视频、手记组成 */ public interface CourseFactory { /** 视频 */ Video produceVideo(); /** 手记 */ Article produceArticle(); } /** * java课程工厂 */ public class JavaCourseFactory implements CourseFactory { /** 生产java视频 */ @Override public Video produceVideo() { return new JavaVideo(); } /** 生产java手记 */ @Override public Article produceArticle() { return new JavaArticle(); } } /** * python课程工厂 */ public class PythonCourseFactory implements CourseFactory { /** 生产python视频 */ @Override public Video produceVideo() { return new PythonVideo(); } /** 生产python手记 */ @Override public Article produceArticle() { return new PythonArticle(); } } /** * 测试类 */ public class Test { public static void main(String[] args) { //创建java课程工厂 CourseFactory javaCourseFactory = new JavaCourseFactory(); //生产java视频、手记 Video jVideo = javaCourseFactory.produceVideo(); Article jArticle = javaCourseFactory.produceArticle(); jVideo.produce(); jArticle.produce(); //创建python课程工厂 CourseFactory pythonCourseFactory = new PythonCourseFactory(); //生产python视频、手记 Video pVideo = pythonCourseFactory.produceVideo(); Article pArticle = pythonCourseFactory.produceArticle(); pVideo.produce(); pArticle.produce(); } }

三、UML类图

 

转载请注明原文地址: https://www.6miu.com/read-5037897.html

最新回复(0)