工程设计模式
一.简单工程设计模式
1.概念
简单工厂模式( Simple Factory Pattern )是指由一个工厂对象决定创建出哪一种产品类的实例。
但它不属于 GOF 23 种设计模式。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。
2.代码实例【课程录制功能工厂案例】
创建一个抽象类
public interface ICourse {/** 录制视频 */void record();
}
创建抽象实现类
//java课程录制功能
public class JavaCourse implements ICourse {public void record() {System.out.println("录制Java课程");}
}
//Python课程录制功能
public class PythonCourse implements ICourse {public void record() {System.out.println("录制Python课程");}
}
创建简单工厂类来,创建对应的对象[这个对象都是抽象类的实现]
public class CourseFactory {//1.通过标识字符串来创建不同实例实例对象public ICourse create(String name){if("java".equals(name)){return new JavaCourse();}else if("python".equals(name)){return new PythonCourse();}else {return null;}}//2.根据类全路径来创建不同的实例对象public ICourse create(String className){try {if (!(null == className || "".equals(className))) {return (ICourse) Class.forName(className).newInstance();}}catch (Exception e){e.printStackTrace();}return null;}//3.通过反射来创建不同的实例对象-->推荐使用更简洁public ICourse create(Class<? extends ICourse> clazz){try {if (null != clazz) {return clazz.newInstance();}}catch (Exception e){e.printStackTrace();}return null;}
}
调用简单的工厂类创建不同的实例对象
public class SimpleFactoryTest {public static void main(String[] args) {//使用类全路径来创建不同的实例对象ICourseFactory factory = new ICourseFactory();ICourse course = factory.create("com.gupaoedu.vip.pattern.factory.JavaCourse");course.record();//通过反射来创建不同的实例对象-->推荐使用更简洁而且不容易错CourseFactory factory = new CourseFactory();ICourse course = factory.create(JavaCourse.class);course.record();}
}
3.上面简单工厂类类图
类全路径来创建不同的实例对象类图:
反射来创建不同的实例对象类图:
4.简单工厂类总结:
简单工厂概念:
-
简单工厂创建较少的对象,根据传入的参数获取不同的实例对象。不需要关注创建实例对象逻辑处理过程。
简单工厂创建步骤:
-
创建抽类并实现抽象类
-
根据抽象类,创建对于的简单工厂类[根据字符串标识创建对应的实例对象[易错];根据类路径创建对应实例对象[易错];通过反射创建实例对象;]
-
调用工厂类创建不同实例对象