目录
前言
一、定义
二、优缺点
二、代码
三、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(); } }