上一次提到了工廠方法模式,經過查閱相關資料,發現可以有改進之處:
改進1.工廠方法
package com.sf.hf;
import com.sf.entity.Apple;
import com.sf.entity.Banana;
import com.sf.jk.Fruit;
public class FruitFactory {
public class FruitFactory {
public static Fruit createFruit(Class c){
//定義一個水果對象
Fruit fruit = null;
try {
fruit = (Fruit) Class.forName(c.getName()).newInstance();
} catch (Exception e) {
System.out.println("創建出錯");
}
return fruit;
}
}
}
改進2.客戶端調用
import com.sf.entity.Apple;
import com.sf.entity.Banana;
import com.sf.hf.FruitFactory;
import com.sf.jk.Fruit;
public class Test {
public static void main(String[] args) {
System.out.println("---------創建蘋果---------");
Fruit apple = FruitFactory.createFruit(Apple.class);
apple.eat();
apple.plant();
System.out.println("---------創建香蕉---------");
Fruit banana = FruitFactory.createFruit(Banana.class);
banana.eat();
banana.plant();
}
}
運行結果:
---------創建蘋果---------
生產水果
蘋果可以吃
蘋果可以種
---------創建香蕉---------
生產香蕉
香蕉可以吃
香蕉可以種
上一次提到的工廠方法是將工廠抽象成一個方法,具體生產產品的方法教給其子類或者實現該接口的子類,
這裏用了反射機制省去了具體的工廠實現類,當需要擴展產品的時候,只要傳入不同的產品類即可。
客戶端調用的時候只需要將產品類傳入即可,如 Apple.class