0 课程地址
https://coding.imooc.com/lesson/270.html#mid=17160
1 代码演练
1.1 未使用简单工厂模式代码
1.2 使用简单工厂模式
1.3 使用反射机制简单工行模式
1 代码演练
1.1 未使用简单工厂模式代码
测试类:
package com.geely.design.pattern.creational.simplefactory; public class Test { /** * 注:此为反例, * 没有用简单工厂模式之前,需要new对象。 * @param args */ public static void main(String [] args){ Video video = new JavaVideo(); video .printVideo(); } }
父类Video:
package com.geely.design.pattern.creational.simplefactory; public abstract class Video { public abstract void printVideo(); }
子类javaVideo:
package com.geely.design.pattern.creational.simplefactory; public class JavaVideo extends Video{ @Override public void printVideo() { System.out.println("录制java视频"); } }
子类netVideo:
package com.geely.design.pattern.creational.simplefactory; public class NetVideo extends Video{ @Override public void printVideo() { System.out.println("录制.Net视频!"); } }
打印结果:
录制java视频
Process finished with exit code 0
1.2 使用简单工厂模式
测试类:
package com.geely.design.pattern.creational.simplefactory; public class Test { /** * 注:此为反例, * 没有用简单工厂模式之前,需要new对象。 * @param args */ // public static void main(String [] args){ // Video video = new JavaVideo(); // video .printVideo(); // } /** * 2 简单工厂模式 * 这里通过参数调取工厂类,直接获得工厂子类
* 可以使用静态方法来创建工厂,优点是工厂类不用new了,但是缺点是静态方法继承后无法修改父类 * @param args */ public static void main(String [] args){ VideoFactory videoFactory = new VideoFactory(); Video video = videoFactory.getVideo("net"); video .printVideo(); } }
工厂类:
package com.geely.design.pattern.creational.simplefactory; public class VideoFactory { private Video video = null; public Video getVideo(String param) { if("java".equals(param)){ return new JavaVideo(); }else if("net".equals(param)){ return new NetVideo(); }else{ return null; } } }
父类(同上):
子类javaVideo:(同上)
子类netVideo(同上):
打印日志:
录制.Net视频!
Process finished with exit code 0
1.3 使用反射机制简单工行模式
测试类:
package com.geely.design.pattern.creational.simplefactory; public class Test { /** * 注:此为反例, * 没有用简单工厂模式之前,需要new对象。 * @param args */ // public static void main(String [] args){ // Video video = new JavaVideo(); // video .printVideo(); // } /** * 2 简单工厂模式 * 这里通过参数调取工厂类,直接获得工厂子类 * @param args */ // public static void main(String [] args){ // VideoFactory videoFactory = new VideoFactory(); // Video video = videoFactory.getVideo("net"); // video .printVideo(); // } /** * 3 简单工厂模式 * 通过反射机制,获得工厂子类 * @param args */ public static void main(String [] args){ VideoFactory videoFactory = new VideoFactory(); //通过反射获取子类 Video video = videoFactory.getVideo(JavaVideo.class); video.printVideo(); } }
工厂类:
package com.geely.design.pattern.creational.simplefactory; public class VideoFactory { private Video video = null; // public Video getVideo(String param) { // if("java".equals(param)){ // return new JavaVideo(); // }else if("net".equals(param)){ // return new NetVideo(); // }else{ // return null; // } // } 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; } }
父类(同上):
子类javaVideo:(同上)
子类netVideo(同上):
打印日志:
录制java视频
Process finished with exit code 0
诸葛