简单工厂
- 定义:由一个工厂对象决定创建出哪一种产品类的实例
- 类型:创建型,但不属于GOF23种设计模式
适用场景:
- 工厂类负责创建的对象比较少
- 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心
- 优点:只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节
- 缺点:工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则
代码示例
public abstract class Video {
public abstract void produce();
}
public class JavaVideo extends Video{
@Override
public void produce() {
System.out.println("录制Java视频");
}
}
public class PythonVideo extends Video{
@Override
public void produce() {
System.out.println("录制Python视频");
}
}
public class VideoFactory {
public Video getVideo(Class cls) {//String type
Video video = null;
try {
video = (Video) Class.forName(cls.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return video;
/* if ("java".equalsIgnoreCase(type)){
return new JavaVideo();
}else if ("python".equalsIgnoreCase(type)){
return new PythonVideo();
}
return null;*/
}
}
测试类:
public class Test {
public static void main(String[] args) {
/* Video video = new JavaVideo();
video.produce();*/
/* VideoFactory factory = new VideoFactory();
Video video = factory.getVideo("python");
if (video ==null) return;
video.produce();*/
VideoFactory factory = new VideoFactory();
Video video = factory.getVideo(JavaVideo.class);
if (video ==null) return;
video.produce();
}
}
应用场景
JDK:
- Calender
- 数据库加载驱动
Class.forName()
- LoggerFactory
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。