普通工廠設計模式中,隨着每增長一個子類,必須修改工廠類,問題的根源在於,咱們在工廠類中,經過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(); } }