上一篇學習了原廠模式的簡單工廠和Factory 方法,現在繼續學習原廠模式的第三種形態:抽象工廠,前面我們的學習的原廠模式都是一個工廠建立一個產品,但如果需要一個工廠建立多個產品的話,就需要我們學習抽象原廠模式了,其實基本原理還是和Factory 方法類似的,只不過將抽象工廠類放入了更多需要具體工廠實現的產品介面而已,下面用例子來說明。
抽象產品ProductA
- public interface ProductA {
- }
抽象產品ProductB
- public interface ProductB {
- }
具體產品ProductA1
- public class ProductA1 implements ProductA {
- public ProductA1() {
- System.out.println("create ProductA1");
- }
- }
具體產品ProductA2
- public class ProductA2 implements ProductA {
- public ProductA2() {
- System.out.println("create ProductA2");
- }
- }
具體產品ProductB1
- public class ProductB1 implements ProductB {
- public ProductB1() {
- System.out.println("create ProductB1");
- }
- }
具體產品ProductB2
- public class ProductB2 implements ProductB {
- public ProductB2() {
- System.out.println("create ProductB2");
- }
- }
抽象工廠類
- public interface AbstractFactory {
- public ProductA createProductA();
- public ProductB createProductB();
- }
具體工廠類FactoryA
- public class FactoryA implements AbstractFactory {
- public ProductA createProductA() {
- // TODO Auto-generated method stub
- return new ProductA1();
- }
- public ProductB createProductB() {
- // TODO Auto-generated method stub
- return new ProductB1();
- }
- }
具體工廠類FactoryB
- public class FactoryB implements AbstractFactory {
- public ProductA createProductA() {
- // TODO Auto-generated method stub
- return new ProductA2();
- }
- public ProductB createProductB() {
- // TODO Auto-generated method stub
- return new ProductB2();
- }
- }
用戶端應用
- public class FactoryDemo3 {
- public static void main(String[] args) {
- AbstractFactory af = new FactoryA();
- ProductA pa1 = af.createProductA();
- ProductB pa2 = af.createProductB();
- }
- }
結果將返回:
create ProductA1
create ProductB1
說明具體工廠的確具備了建立兩個產品的能力。