普通工厂设计模式中,随着每增长一个子类,必须修改工厂类,问题的根源在于,咱们在工厂类中,经过new关键字,建立对象,这样随着子类的愈来愈多,修改次数愈来愈多,子类和工厂类的耦合性太大,咱们须要解耦java
咱们能够经过反射进行子类和工厂类的解耦。设计模式
package com.factory; interface Animal{ public void sleep(); } class Sheep implements Animal{ @Override public void sleep() { System.out.println("绵羊睡觉"); } } class Cat implements Animal{ @Override public void sleep() { System.out.println("猫咪睡觉"); } } class Factory{ public static Animal getInstance(String className){ Animal a=null; try { //利用反射机制实例化对象,这里运用反射,能够解决子类增长必须修改工厂类的问题 a=(Animal)Class.forName(className).newInstance(); } catch(Exception e) { e.printStackTrace(); } return a; } } public class TestFactory { public static void main(String[] args) { //这里只须要传入目标类的全类名便可 Animal a=Factory.getInstance("com.factory.Cat"); a.sleep(); } }