- 工厂模式
- 简单工厂模式
- 第一种方式:
- 第二种方式
- 第三种方式
工厂模式专门负责将大量由共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。
-
简单工厂模式(Simple Factory)模式:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出哪种产品类的实例
-
工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式
-
抽象工厂(Abstract Factory)模式:又称工具箱(Kit或Toolkit)模式
假设目前有课程模块,包括Java课程,python课程,我们需要对不同用户创建不同的课程,甚至以后可能加入人工智能课程大数据等等,要求可扩展性
代码实现
第一种方式:1.创建JavaCourse类
public class JavaCourse {
public void record() {
System.out.println("录制Java课程");
}
}
2.创建Python课程类
public class PythonCourse {
public void record() {
System.out.println("录制Python课程");
}
}
3.测试
public class Test {
public static void main(String[] args) {
JavaCourse() java = new JavaCourse();
PythonCourse() python = new PythonCourse();
java.record(); //录制Java课程
python.record(); //录制Python课程
}
}
第二种方式
1.创建Course接口类,将录制课程定为抽象方法
public interface Course {
void record();
}
2.让JavaCourse和PythonCourse实现Course接口
public class JavaCourse implements Course{
@Override
public void record() {
System.out.println("录制Java课程");
}
}
public class PythonCourse implements Course{
@Override
public void record() {
System.out.println("录制Python课程");
}
}
3.测试
public class Test {
public static void main(String[] args) {
Course java = new JavaCourse();
Course python = new PythonCourse();
java.record();
python.record();
//录制Java课程
//录制Python课程
}
}
第三种方式
1.创建工厂
public class CourseFactory {
public static Course create(String courseName) {
if ("java".equals(courseName)) {
return new JavaCourse();
}else if ("python".equals(courseName)) {
return new PythonCourse();
}else {
return null;
}
}
public static Course create1(String className) {
try {
if (!(className == null || "".equals(className))) {
return (Course) Class.forName(className).newInstance();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public static Course create2(Class extends Course> clazz) {
try{
if (clazz != null) {
return clazz.newInstance();
}
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
2.测试
public class Test {
public static void main(String[] args) {
//工厂1.0
Course python = CourseFactory.create("python");
python.record();//录制Python课程
Course java = CourseFactory.create("java");
java.record();//录制Java课程
Course ai = CourseFactory.create("ai");
ai.record();//NullPointerException
//工厂2.0
Course course = CourseFactory.create1("simplefactory.JavaCourse");
course.record();
//工厂3.0
Course course1 = CourseFactory.create2(JavaCourse.class);
course1.record();
}
}
类图



