简单工厂模式( Simple Factory Pattern )是指由一个工厂对象决定创建出哪一种产品类的实例。
但它不属于 GOF 23 种设计模式。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。
创建一个抽象类
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();
}
}
简单工厂概念:
简单工厂创建较少的对象,根据传入的参数获取不同的实例对象。不需要关注创建实例对象逻辑处理过程。
简单工厂创建步骤:
创建抽类并实现抽象类
根据抽象类,创建对于的简单工厂类[根据字符串标识创建对应的实例对象[易错];根据类路径创建对应实例对象[易错];通过反射创建实例对象;]
调用工厂类创建不同实例对象