工廠模式學習筆記
之前我們學習了簡單工廠模式(靜態工廠模式),當具體產品類變多的話,工廠類中就會包含大量的if..else..代碼。其次,當增加新的具體產品類的時候,還需要修改工廠類的業務邏輯,違反了“開閉原則”。爲了解決這個問題,工廠模式應運而生。
在工廠方法模式中,我們不再提供一個專門的工廠類來構建所有的產品對象,而是針對不同的產品類提供不同的工廠,系統提供一個和產品等級結構對應的工廠等級結構。
工廠方法模式定義:
定義一個用於創建對象的接口,讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到其子類。工廠方法模式簡稱爲工廠模式,又可稱爲虛擬構造器模式或者多態工廠模式。工廠模式是一種類創建性模式。
抽象工廠:
interface Factory {
public Product factoryMethod();
}
具體工廠A:
class ConcreteFactoryA implements Factory {
public Product factoryMethod() {
return new ConcreteProductA();
}
}
具體工廠B:
class ConcreteFactoryB implements Factory {
public Product factorMethod() {
return new ConcreteProductB();
}
}
客戶端調用:
class Client {
public static void main(String args[]) {
Factory factory = new ConcreteFactoryA();
Product product;
product = factory.factoryMethod();
}
}
客戶端針對抽象工廠進行編程,在具體運行的時候實例化指定的具體工廠類,然後創建不同的產品。
工廠方法模式總結:
1. 優點
用戶只需要關心所需要的產品對應工廠。在加入新產品時,無須修改抽象工廠和抽象產品提供的接口,只需要添加一個具體工廠和具體產品就可以了。
2. 缺點
增加產品的時候,需要增加具體產品類和對應的具體工廠類,系統中類的個數成對增加。
適用場景:
客戶端不需要知道所需要的對象的類。在工廠方法模式中,具體的產品對象都是由對應的具體的工廠類創建的,客戶端針對抽象工廠編程,只需要抽象工廠提供一個創建產品的接口,運行時根據多態性會自動的創建相應的產品。