1. 概述
2. 代码示例
/**
* 定义接口.
*/
public interface Video {
void produce();
}
public class JavaVideo implements Video {
@Override
public void produce() {
System.out.println("JAVA video");
}
}
public class WebVideo implements Video {
@Override
public void produce() {
System.out.println("WEB video");
}
}
public class VideoFactory {
/**
* 这样的写法, 会破坏开闭原则;
*/
public static Video create(String type) {
if ("java".equalsIgnoreCase(type)) {
return new JavaVideo();
} else if ("web".equalsIgnoreCase(type)) {
return new WebVideo();
}
return null;
}
/**
* 通过反射来弥补开闭原则.
*/
public static Video create(Class videoClass) {
try {
return (Video) Class.forName(videoClass.getName()).newInstance();
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
return null;
}
}
public class SimpleFactoryTest {
public static void main(String[] args) {
VideoFactory.create("java").produce();
VideoFactory.create(JavaVideo.class).produce();
}
}