設計模式之工廠設計模式(二:抽象工廠模式)

工廠模式:用來實例化有共同接口的類,應用工廠模式能夠動態決定實例化哪個類html

工廠模式的分類:ide

一、簡單工廠模式(Simple Factory)測試

二、工廠方法模式(Factory Method)ui

三、抽象工廠模式(Abstruct Factory)spa

(本文只介紹抽象工廠模式,想了解簡單工廠模式工廠方法模式請到http://www.cnblogs.com/Not-Famous/p/3648535.html.net

另外,本文轉自http://blog.csdn.net/liruikqn/article/details/12888511,本人根據我的理解,稍有刪改。翻譯

 

  抽象工廠模式(Abstract Factory)是工廠方法模式的進一步抽象,其英文原話"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻譯,「爲建立一組相關或相互依賴的對象提供一個接口,無需指定它們的具體類」。抽象工廠模式一般是用於創一族產品,而且這族產品分不一樣的等級;不一樣的具體工廠類生產不一樣等級的一族產品。抽象工廠模式也有四種角色:抽象工廠、具體工廠、抽象產品和具體產品。抽象工廠模式的類圖以下:code

 

  能夠看到產品族包括ProductA和ProductB兩種產品,每一個具體工廠都能生產這兩種產品,只是ConcreteFactory1生產的等級爲1的族產品;ConcreteFactory2生產的是等級爲2的族產品。下面以上圖爲模型,寫一個demo,測試抽象工廠模式。htm

1.定義抽象工廠接口對象

1 //抽象工廠,定義了生產族產品的方法;
2 public interface AbstractFactory {
3     public ProductA factoryA();
4     public ProductB factoryB();
5 }

2.定義產品A接口

1 //抽象產品A定義了產品的公共方法,產品A和B屬於一個產品族
2 public interface ProductA {
3     public void method1();
4     public void method2();
5 }

3.定義產品B接口

1 //抽象產品A定義了產品的公共方法,產品A和B屬於一個產品族
2 public interface ProductA {
3     public void method1();
4     public void method2();
5 }

4.定義生產等級爲1的族產品的具體工廠的類

 1 //ConcreateFactory1是用來生產等級爲1的產品A,B;
 2 public class ConcreateFactory1 implements AbstractFactory {
 3 
 4     //生產等級爲1的產品A
 5     @Override
 6     public ProductA factoryA() {
 7         // TODO Auto-generated method stub
 8         return new ConcreateProductA1();
 9     }
10 
11     
12     //生產等級爲1的產品B
13     @Override
14     public ProductB factoryB() {
15         // TODO Auto-generated method stub
16         return new ConcreateProductB1();
17     }
18 
19 }

5.定義生產等級爲2的族產品的具體工廠的類

 1 //ConcreateFactory2是用來生產等級爲1的產品A,B;
 2 public class ConcreateFactory2 implements AbstractFactory {
 3 
 4     //生產等級爲2的產品A
 5     @Override
 6     public ProductA factoryA() {
 7         // TODO Auto-generated method stub
 8         return new ConcreateProductA2();
 9     }
10 
11     
12     //生產等級爲2的產品B
13     @Override
14     public ProductB factoryB() {
15         // TODO Auto-generated method stub
16         return new ConcreateProductB2();
17     }
18 
19 }

6.定義等級爲1的產品A(具體產品)的類

//等級爲1的具體產品A
public class ConcreateProductA1 implements ProductA {

    @Override
    public void method1() {
        // TODO Auto-generated method stub
        System.out.println("等級爲1的產品A的method1()");
    }

    @Override
    public void method2() {
        // TODO Auto-generated method stub
        System.out.println("等級爲1的產品A的method2()");
    }
}

7.定義等級爲2的產品A(具體產品)的類

 1 //等級爲2的具體產品A
 2 public class ConcreateProductA2 implements ProductA {
 3 
 4     @Override
 5     public void method1() {
 6         // TODO Auto-generated method stub
 7         System.out.println("等級爲2的產品A的method1()");
 8     }
 9 
10     @Override
11     public void method2() {
12         // TODO Auto-generated method stub
13         System.out.println("等級爲2的產品A的method2()");
14     }
15 }

8.定義等級爲1的產品B(具體產品)的類

 1 //等級爲1的產品B
 2 public class ConcreateProductB1 implements ProductB{
 3 
 4     @Override
 5     public void method1() {
 6         // TODO Auto-generated method stub
 7         System.out.println("等級爲1的產品B的method1()");
 8     }
 9 
10     @Override
11     public void method2() {
12         // TODO Auto-generated method stub
13         System.out.println("等級爲1的產品B的method2()");
14     }
15 }

9.定義等級爲2的產品B(具體產品)的類

 1 //等級爲2的產品B
 2 public class ConcreateProductB2 implements ProductB {
 3 
 4     @Override
 5     public void method1() {
 6         // TODO Auto-generated method stub
 7         System.out.println("等級爲2的產品B的method1()");
 8     }
 9 
10     @Override
11     public void method2() {
12         // TODO Auto-generated method stub
13         System.out.println("等級爲2的產品B的method2()");
14     }
15 }

  由此可知,抽象工廠模式相對於工廠方法模式來講,每一個具體工廠能夠生產一族產品(即多種產品);而工廠方法模式是具體工廠生產相應的具體產品,只能生產一種產品。當產品族中只有一種產品時抽象工廠模式退化成工廠方法模式。

  以上即是抽象工廠模式的內容,層次會比較複雜,建議讀者結合代碼和類圖來理解!

相關文章
相關標籤/搜索