1、背景知识
【1】定义
【2】特点
【3】优点
【4】缺点
2、coding
【1】创建video抽象类
public abstract class Video {
public abstract void produce();
}
【2】创建javavideo类
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("录制Java课程视频");
}
}
【3】创建python类
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("录制Python课程视频");
}
}
【4】创建一个video工厂类
public class VideoFactory {
//反射实现
public Video getVideo(Class c){
Video video = null;
try {
//核心代码
video = (Video) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return video;
}
//普通方式
public Video getVideo(String type){
//忽略大小写的比较
if("java".equalsIgnoreCase(type)){
return new JavaVideo();
}else if("python".equalsIgnoreCase(type)){
return new PythonVideo();
}
return null;
}
}
【5】创建一个test测试类,一种是反射,另一种种是普通的。
public class Test {
public static void main(String[] args) {
// 普通的方式
// VideoFactory videoFactory = new VideoFactory();
// Video video = videoFactory.getVideo("java");
// if(video == null){
// return;
// }
// video.produce();
// 反射实现
VideoFactory videoFactory = new VideoFactory();
//注意区别,这里传的是class类型
Video video = videoFactory.getVideo(JavaVideo.class);
if(video == null){
return;
}
video.produce();
}
}
UML图: