1. 简单工厂
简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例。
属于创建型模式,但它不属于GOF,23种设计模式。
案例1:假设要开展一个直播课,包含大数据,java,人工智能等等,这样一个过程用简单工厂来实现!ICourse课程接口
public interface ICourse {//课程录制public void record();}
公共接口
JavaCourse java工程类
public class JavaCourse implements ICourse {@Overridepublic void record() {System.out.println("录制java课程");}}
实现了课程接口,重写了方法
CourseFactory 课程工厂
public class CourseFactory {/*public ICourse create(String name){if ("java".equals(name)){return new JavaCourse();}else{return null;}}*//*public ICourse create(String className){try {if (!(null == className || "".equals(className))){return (ICourse)Class.forName(className).newInstance();}}catch (Exception e){e.printStackTrace();}return null;}*/public ICourse create(Class clazz){try {if (clazz != null){return (ICourse)clazz.newInstance();}}catch (Exception e){e.printStackTrace();}return null;}}
课程工厂负责对象的创建,用于后续调用对象方法
SimpleFactoryTest 测试类
public class SimpleFactoryTest {public static void main(String[] args) {/*CourseFactory factory = new CourseFactory();ICourse course = factory.create("com.tiansu.shejimoshi.factory.SimpleFactory.JavaCourse");course.record();*/CourseFactory factory = new CourseFactory();ICourse course = factory.create(JavaCourse.class);course.record();}}
如果我们需要创建大数据课程录播,我们只需要再写一个大数据课程类,实现课程接口就可以了!
简单工厂在很多场景都有应用,比如我们的日志方法,调用时间的api等等。
工厂类负责创建的对象比较少,客户端只需要传入工厂的参数,对于如何创建对象的逻辑不需要关心。
简单工厂缺点:工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背开闭原则,不易于扩展过于复杂的产品结构。
2. 工厂方法模式
工厂方法模式(Factory Method Pattern)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行,属于创建型设计模式。
ICourseFactory 课程工厂
public interface ICourseFactory {ICourse create();}
JavaCourseFactory java课程工厂
public class JavaCourseFactory implements ICourseFactory{@Overridepublic ICourse create() {return new JavaCourse();}}
PythonCourseFactory python工厂
public class PythonCourseFactory implements ICourseFactory{@Overridepublic ICourse create() {return new PythonCourse() ;}}
FactoryMethodTest 测试类
public class FactoryMethodTest {public static void main(String[] args) {ICourseFactory factory = new PythonCourseFactory();ICourse iCourse = factory.create();iCourse.record();}}
工厂模式方法优点对于新的课程,只需要创建对应的工厂类即可,如果需要改动执行内容则新创建一个工厂方法!
3. 抽象工厂模式(工厂方法模式升级)
抽象工厂模式(Abstract Factory Pattern)是指提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类,属于创建型设计模式。

面对更多的业务背景和各式各样的课程产品选择!!!
ICourseFactory 工厂方法
//要求所有子工厂都实现这个工厂//(一个品牌的抽象)//不符合开闭原则public interface ICourseFactory {ICourse createCourse();INote createNote();IVideo createVideo();}
JavaCourseFactory java课程工厂
public class JavaCourseFactory implements ICourseFactory {@Overridepublic ICourse createCourse() {return new JavaCourse();}@Overridepublic INote createNote() {return new JavaNote();}@Overridepublic IVideo createVideo() {return new JavaVideo();}}
PythonCourseFactory python课程工厂
public class PythonFactory implements ICourseFactory{@Overridepublic ICourse createCourse() {return null;}@Overridepublic INote createNote() {return null;}@Overridepublic IVideo createVideo() {return null;}}
AbstractFactoryTest 测试类
public class AbstractFactoryTest {public static void main(String[] args) {ICourseFactory factory = new JavaCourseFactory();factory.createCourse().record();factory.createNote();factory.createVideo();}}
抽象工厂适应场景:
客户端不依赖于产品类实例规则如何被创建、实现等细节。
强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。
提供一个产品类库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。
抽象工厂优点:
具体产品在应用层代码隔离,无需关心创建细节。
将一个系列的产品族统一到一起创建。
抽象工厂缺点:
规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象产品工厂的接口。
增加了系统的抽象性和理解难度。
