一、什麼是簡答工廠模式?
簡答工廠模式屬於類的創建模式,又叫做靜態工廠方法模式。通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
(1)、創建Apple類
package com.renxin.simplefactory;
public class Apple implements Fruit{
/**
* 採集蘋果
*/
public void get() {
System.out.println("採集蘋果!");
}
}
(2)、創建Banana類
package com.renxin.simplefactory;
public class Banana implements Fruit{
/**
* 採集香蕉
*/
public void get() {
System.out.println("採集香蕉!");
}
}
(3)、創建接口Fruit
package com.renxin.simplefactory;
public interface Fruit {
public void get();
}
(4)、創建測試類MainClass
package com.renxin.simplefactory;
public class MainClass {
public static void main(String[] args) {
//實例化Apple,這裏用到了多態
Fruit apple = new Apple();
apple.get();
//實例化Banana
Fruit banana = new Banana();
banana.get();
}
}
以上代碼它們都有一個共同的Fruit父類!
控制檯打印結果爲:
採集蘋果!
採集香蕉!
(5)、定義一個類來負責創建其他類的實例FruitFactory
package com.renxin.simplefactory;
public class FruitFactory {
/**
* 獲得Apple類的實例
*/
public static Fruit getApple() {
return new Apple();
}
/**
* 獲得Banana類的實例
*/
public static Fruit getBanana() {
return new Banana();
}
}
(6)、修改測試類MainClass
//實例化Apple和Banana
Fruit apple = FruitFactory.getApple();
Fruit banana = FruitFactory.getBanana();
apple.get();
banana.get();
控制檯輸出結果爲:
採集蘋果!
採集香蕉!
以上代碼就是對簡單工廠模式的實現,通過專門一個類來負責創建其他類的實例,這些被創建的實例都有一個共同的父類Fruit。
這裏我們可以發現FruitFactory存在一定的冗餘,因此我們可以修改FruitFactory類
/**
* get方法,獲取所有產品對象
* @throws IllegalAccessException
* @throws InstantiationException
*
*/
public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {
if(type.equalsIgnoreCase("apple")) {
return Apple.class.newInstance();
}else if(type.equalsIgnoreCase("banana")) {
return Banana.class.newInstance();
}else {
System.out.println("找不到相應的實例化類!");
return null;
}
}
修改測試類MainClass
Fruit apple = FruitFactory.getFruit("apple");
Fruit banana = FruitFactory.getFruit("banana");
apple.get();
banana.get();
二、模式中包含的角色及其職責
1、工廠(Creator)角色(也就是上面FruitFactory類):簡單工廠模式的核心,它是負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。
2、抽象(Product)角色(也就是上面的Fruit接口):簡單工廠模式所創建的所有對象的父類,它是負責描述所有實例所共有的公共接口。
3、具體產品(Concrete Product)角色(也就是上面的Apple和Banana):簡單工廠模式所創建的具體實例對象。
三、簡單工廠模式的優缺點:
在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建那個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需要的實例,而無需瞭解這些對象是如何創建以及如何組着的。有利於整個軟件體系結構的優化。
不難發現,簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以“高內聚”方面做的並不好。另外,當系統中的具體產品類不斷增多時,可能出現要求工廠類也做好相應的修改,擴展性不是很好。