簡單工廠模式是類的創建模式,該模式的基本結構如下圖:
簡單工廠模式是由一個工廠類根據傳入的參量類型決定創建出那類產品實例。下面根據一個示意性的實例說明簡單工廠模式結構,如下圖所示:
從上圖可以看出,簡單工廠模式涉及工廠角色、抽象產品角色及具體產品角色:
(1)工廠角色:擔任該角色是工廠方法模式的核心
(2)抽象產品角色:有工廠方法創建對象的父類,或它們共同擁有的接口;爲所有具體產品提供共同的類型。
(3)具體產品角色:工廠產品方法所創建的任何對象都是這個角色的對象
工廠角色源代碼:
package com.create.easyfactory;
public class FruitGardener {
public static Fruit factory(String fruit) throws BadFruitException{
if(fruit.equals("apple")){
return new Apple();
}else if(fruit.equals("grape")){
return new Grape();
}else if(fruit.equals("strawBerry")){
return new StrawBerry();
}else{
throw new BadFruitException("bad fruit request");
}
}
}
抽象產品源代碼:
package com.create.easyfactory;
public interface Fruit {
void grow();
void havest();
void plant();
}
具體產品角色源代碼(其中之一爲例):
package com.create.easyfactory;
public class Apple implements Fruit {
private int treeAge;
public void grow() {
log("Apple is growing ……");
}
public void havest() {
log("Apple has been havested.");
}
public void plant() {
log("Apple has been planted.");
}
public static void log(String log){
System.out.println(log);
}
public int getTreeAge() {
return treeAge;
}
public void setTreeAge(int treeAge) {
this.treeAge = treeAge;
}
}
抽象產品角色使用java抽象類還是java接口
如果模式所產生的具體類之間沒有共同的商業邏輯,則使用java接口;相反,如果具體類之間有共同的商業邏輯,那麼這些公共的商業邏輯應移到抽象層,則使用抽象類。
多個工廠方法
每個工廠類可以有多於一個工廠方法
角色間合併
如果系統中僅有一個具體產品類,那麼抽象與具體可以合併。
某些情況抽象產品與工廠角色合併,典型的實例爲java.text.DateFormat類