工廠方法模式同樣屬於類的創建型模式又被稱爲多態工廠模式。工廠方法模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成爲一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。
抽象工廠角色:
工廠方法模式的核心,任何工廠類都必須實現這個接口。
/**
* 抽象工廠角色
* @author guosheng
*
*/
public interface AnimalFactory {
public Animal getAnimal(String className);
}
具體工廠角色:
具體工廠類是抽象工廠的一個實現,負責實例化產品對象。
/**
* 創建貓的工廠
* 具體工廠角色
* @author guosheng
*
*/
public class CatFactory implements AnimalFactory {
@Override
public Animal getAnimal(String className) {
return new Cat();
}
}
抽象角色:
工廠方法模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
/**
* 抽象角色
* 動物接口
* @author guosheng
*
*/
public interface Animal {
public void move();
}
具體產品角色:
工廠方法模式所創建的具體實例對象
/**
* 具體實例
* 貓
* @author guosheng
*
*/
public class Cat implements Animal{
public void move(){
System.out.println("貓:四隻腿,走走走");
}
}
工廠方法模式與簡單工廠模式比較:
結構不同:工廠方法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。
工廠方法模式之所以有一個別名叫多態性工廠模式是因爲具體工廠類都有共同的接口,或者有共同的抽象父類。當系統擴張需要添加新的產品對象時,僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也不需要修改客戶端,很好的符合了“開放-封閉”原則。而簡單工廠模式再添加新產品對象後不得不修改工廠方法,擴展性不好。
工廠方法模式退化後可以演變成簡單工廠模式。