很久之前寫好的筆記,開放學習,希望跟大家多多交流,近期持續開放更多的個人學習總結。
1、什麼是工廠方法模式?
工廠方法模式同樣屬於類的創建模式又稱爲多態工廠模式
2、它存在的意義是什麼?
工廠方法模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。
核心工廠類不在負責產品的創建,這樣核心類成爲一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步
抽象化的好處是使得工廠方法模式可以使系統不修改具體工廠角色的情況下引進新的產品
3、代碼實現
public class Cat implements Animal{
public void eat() {
System.out.println("貓吃魚!!!");
}
}
public interface Animal {
public void eat();
}
public interface AnimalFactory {
public Animal getAnimal();
}
public class CatFactory implements AnimalFactory{
public Animal getAnimal() {
// TODO Auto-generated method stub
return new Cat();
}
}
public class TestMain {
public static void main(String[] args) {
AnimalFactory ca = new CatFactory();
Animal cat = ca.getAnimal();
cat.eat();
}
}
4、模式中的角色和職責
a、抽象工廠角色
工廠方法模式的核心,任何工廠類都必須實現這個接口,即例子中的AnimalFactory
b、具體工廠角色
具體工廠類是抽象工廠的一個實現,負責實例化產品對象,即例子中的CatFactory
c、抽象角色
工廠方法模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口,即例子中的Animal
d、具體產品角色
工廠方法模式所創建的具體實例對象,即例子中的Cat5、工廠方法模式和簡單工廠模式比較
工廠方法模式和簡單工廠模式在結構上的不同是不明顯。工廠方法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具體類上。
工廠方法模式之所以有一個別名叫多態性工廠模式是因爲具體工廠類都有共同的接口,或者有共同的抽象父類
當系統擴展需要添加新的產品對象時,僅僅需要添加一個具體對象以及一個具體工廠對象,原有工廠對象不需要進行任何修改,也不需要
修改客戶端,很好符合了OCP(開放-封閉原則)。而簡單工廠模式在添加新產品對象後不得不修改工廠方法,擴展性不好
工廠方法模式退化後可以演變成簡單工廠模式