1、 概述:
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到子類。
2. 模式中的角色
-
抽象工廠(Creator):這個抽象類(或接口)聲明一個創建對象的工廠方法,用來返回一個Product類型的對象。
-
具體工廠(ConcreteCreator):重定義工廠方法,返回一個具體的Concrete Product實例。
-
抽象產品(Product):定義工廠方法所創建的對象。
-
具體產品(ConcreteProduct): 具體產品,繼承自Product抽象類。
3、結構圖
4、代碼實現
//抽象產品
abstract class Product {
//聲明抽象業務方法
public abstract void opration();
}
// 具體產品 A
class ConcreteProductA extends Product {
public void opration() {
//業務方法的實現
}
}
// 具體產品 B
class ConcreteProductB extends Product {
public void opration() {
//業務方法的實現
}
}
//抽象工廠,聲明瞭一個創建Product的方法,(聲明爲接口或者抽象類)
interface Factory {
public Product factoryMethod();
}
//具體產工廠,產品類 A 的創建者,繼承自抽象工廠Creator
class ConcreteAFactory implements Factory {
public Product factoryMethod() {
return new ConcreteProductA ();
}
}
//具體產工廠,產品類 B 的創建者,繼承自抽象工廠Creator
class ConcreteBFactory implements Factory {
public Product factoryMethod() {
return new ConcreteProductB();
}
}
具體調用:
//創建A
Factory factory = new ConcreteAFactory();
Product product = factory.factoryMethod();
5、 使用場景
- 對於某個產品,調用者清楚地知道應該使用哪個具體工廠服務,實例化該具體工廠,生產出具體的產品來。
- 子類的數量不固定,隨時可能有新的功能子類出現