前言
通过记录的方式对所学知识做一个记录,加深印象,巩固记忆。仅此而已。
定义
由一个工厂对象决定创建出哪一种产品类的实例。
使用场景
1.工厂类创建的实例比较少。
2.在创建对象之前不需要关心内部实现,应用层只需传入所需要创建产品的参数即可。
优点
只需要传入所需要的参数便可创建所需对象,无需关心内部逻辑具体实现。
缺点
工厂类的职责相对过重,再需要添加新产品时,需要去修改工厂类的内部判断逻辑,违背了开闭原则。
UML类图

vedio 类
public abstract class Vedio {
public abstract void produce();
}
JavaVedio 类
public class JavaVedio extends Vedio{
@Override
public void produce() {
System.out.println("java相关课程");
}
}
PythonVedio 类
public class PythonVedio extends Vedio{
@Override
public void produce() {
System.out.println("python相关课程");
}
}
SimpleFactory
public class SimpleFactory {
// public Vedio getVedio(String type){
// if("java".equals(type)){
// return new JavaVedio();
// }else if("python".equals(type)){
// return new PythonVedio();
// }
// return null;
// }
// 利用类的反射机制
public Vedio getVedio(Class c){
Vedio vedio = null;
try {
vedio = (Vedio) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return vedio;
}
}
测试类
public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory();
// Vedio java = simpleFactory.getVedio("python");
// simpleFactory.getVedio("python");
// java.produce();
Vedio vedio = simpleFactory.getVedio(PythonVedio.class);
vedio.produce();
}
}
Calendar.java(jdk源码解析)

getInstance()
