简略工厂
- 定义:由一个工厂对象决定创立出哪一种产品类的实例
- 类型:创立型,但不属于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