問題:
當系統要建立一組相關或者相互依賴的對象時, 請使用抽象原廠模式.
抽象原廠模式可以向用戶端提供一個介面, 使得用戶端可以在不必指定產品的具體類型的情況下, 建立多個產品族中的產品對象. 這就是抽象工廠的用意.
類圖:
原始碼:
package com.designpatterns.AbstractFactory;
/**
* 抽象工廠
*/
public interface AbstractFactory {
public AbstractProductA CreateProductA();
public AbstractProductB CreateProductB();
}
public interface AbstractProductA {
public void Operation();
}
public interface AbstractProductB {
public void Operation();
}
public class ConcreteFactory1 implements AbstractFactory{
public AbstractProductA CreateProductA()
{
return new ProductA1();
}
public AbstractProductB CreateProductB()
{
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory{
public AbstractProductA CreateProductA()
{
return new ProductA2();
}
public AbstractProductB CreateProductB()
{
return new ProductB2();
}
}
public class ProductA1 implements AbstractProductA {
public ProductA1()
{
System.out.println("ProductA1...");
}
public void Operation() {}
}
public class ProductA2 implements AbstractProductA {
public ProductA2()
{
System.out.println("ProductA2...");
}
public void Operation() {}
}
public class ProductB1 implements AbstractProductB {
public ProductB1()
{
System.out.println("ProductB1...");
}
public void Operation() {}
}
public class ProductB2 implements AbstractProductB {
public ProductB2()
{
System.out.println("ProductB2...");
}
public void Operation() {}
}
/**
* 用戶端類
*/
public class Client {
public static void main(String[] args) {
AbstractFactory af1 = new ConcreteFactory1();
af1.CreateProductA();
af1.CreateProductB();
AbstractFactory af2 = new ConcreteFactory2();
af2.CreateProductA();
af2.CreateProductB();
}
}
討論:
AbstractFactory模式是為建立一組(有多類)相關或依賴的對象提供建立介面, 而Factory模式是為一類對象提供建立介面或延遲物件的建立到子類中實現. AbstractFactory模式通常都是使用Factory模式實現, 如上例所示.