在jdk9中直接使用泛型的newInstance方法已经过时。重写的getClass()方法如下:
public <T> T getClass(Class<? extends T> clazz) { T obj = null; try { obj = clazz.getDeclaredConstructor().newInstance(); } catch (ReflectiveOperationException e) { e.printStackTrace(); } return obj; }
在上面的基础上进一步扩展,针对多个接口实现一个公共的工厂类:
public class ObjectFactory { public <T> Object getObject(Class<T> clazz) { if (clazz == null ) { return null; } Object obj = null; try { obj = Class.forName(clazz.getName()).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { e.printStackTrace(); } return obj; } }
public class ShapeFactory { public static <T> T getClass(Class<? extends T> clazz) { T obj = null; try { obj = (T) Class.forName(clazz.getName()).newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return obj; } }
省略类型强制转换,支持多态
Rectangle rect = ShapeFactory.getClass(Rectangle.class); rect.draw(); Shape square = ShapeFactory.getClass(Square.class); square.draw();
使用反射机制可以解决每次增加一个产品时,都需要增加一个对象实现工厂的缺点
public class ShapeFactory { public static Object getClass(Class<?extends Shape> clazz) { Object obj = null; try { obj = Class.forName(clazz.getName()).newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return obj; } }
使用的使用采用强制转换
Rectangle rect = (Rectangle) ShapeFactory.getClass(Rectangle.class); rect.draw(); Square square = (Square) ShapeFactory.getClass(Square.class); square.draw();
这样就只需要一个对象实现工厂
开闭原则:实现热插拔,提高扩展性。
里氏代换原则:实现抽象的规范,实现子父类互相替换;
依赖倒转原则:针对接口编程,实现开闭原则的基础;
接口隔离原则:降低耦合度,接口单独设计,互相隔离;
迪米特法则,又称不知道原则:功能模块尽量独立;
合成复用原则:尽量使用聚合,组合,而不是继承;
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
2233工厂模式
在jdk9中直接使用泛型的newInstance方法已经过时。重写的getClass()方法如下:
2232工厂模式
在上面的基础上进一步扩展,针对多个接口实现一个公共的工厂类:
2231工厂模式
省略类型强制转换,支持多态
2230工厂模式
使用反射机制可以解决每次增加一个产品时,都需要增加一个对象实现工厂的缺点
使用的使用采用强制转换
这样就只需要一个对象实现工厂
2229设计模式简介
开闭原则:实现热插拔,提高扩展性。
里氏代换原则:实现抽象的规范,实现子父类互相替换;
依赖倒转原则:针对接口编程,实现开闭原则的基础;
接口隔离原则:降低耦合度,接口单独设计,互相隔离;
迪米特法则,又称不知道原则:功能模块尽量独立;
合成复用原则:尽量使用聚合,组合,而不是继承;