工廠方法模式

工廠方法模式定義

Define an interface for creating an object,but let subclasses decide which class to instantite.Factory Method lets a class defer instantation to subclass.

工廠方法模式的一般類圖

工廠方法模式的通用源碼

1.抽象產品類

1
2
3
4
5
6
7
8
packageFactoryMethod;
publicabstractclassProduct {
publicvoidmethod1(){
System.out.println("這是產品類的業務邏輯處理方法");
}
publicabstractvoidmethod2();

2.具體的產品類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
packageFactoryMethod;
publicclassConcreteProduct1 extendsProduct {
@Override
publicvoidmethod2() {
System.out.println("這是產品一的業務邏輯處理方法");
}
}
packageFactoryMethod;
publicclassConcreteProduct2 extendsProduct {
@Override
publicvoidmethod2() {
System.out.println("這是產品二的業務邏輯處理方法");
}
}

3.抽象工廠類

1
2
3
4
5
packageFactoryMethod;
publicabstractclassCreator {
publicabstractextendsProduct> T createProduct(Class  c);
}

4.具體工廠類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
packageFactoryMethod;
publicclassConcreteCreator extendsCreator {
publicextendsProduct> T createProduct(Class  c) {
Product product = null;
try{
product = (Product)Class.forName(c.getName()).newInstance();
catch(Exception e) {
e.printStackTrace();
}
return(T)product;
}
}

5.客戶端代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
packageFactoryMethod;
publicclassClient {
/**
* @author ZhangH
*/
publicstaticvoidmain(String[] args) {
Creator creator = newConcreteCreator();
Product product1 = creator.createProduct(ConcreteProduct1.class);
Product product2 = creator.createProduct(ConcreteProduct2.class);
product1.method1();
product1.method2();
System.out.println();
product2.method1();
product2.method2();
}
}


工廠方法模式的優點

優點:

    1. 良好的封裝性,降低模塊間的耦合;

    2. 面向產品接口,屏蔽產品類。

    3. 典型的解耦框架。高層模塊只需要知道產品的抽象類。

    4. 符合迪米特法則、依賴倒置原則、里氏替換原則。

工廠方法模式的特殊應用

  1. 簡單工廠模式(靜態工廠模式)

    1. 描述:去掉了工廠方法模式中的工廠抽象類,同時把具體工廠方法中的方法設置爲靜態。

    2. 優點:簡化結構、調用過程

    3. 缺點:不利於擴展、不符合開閉原則

  2. 多個工廠方法模式

    1. 描述:對普通工廠方法模式的改進,多個工廠方法模式是提供多個工廠方法,分別創建對象

    2. 優點:創建類的職責清晰,結構簡單

    3. 缺點:增加擴展難度(增加協調類,封裝子工廠類,對高層提供統一的訪問接口)

  3. 替代單例模式

    1. 描述:採用工廠方法模式實現單例模式的功能

    2. 做法:

      1. 私有單例類,不允許new出對象

      2. 在工廠類內,使用反射機制創建一個對象

  4. 延遲初始化

    1. 描述一個對象被消費完畢後,不立刻釋放,工廠類保持其,等待再次使用。

    2. 做法:

      1. 在工廠類中以集合的形式容納所有產生對象

      2. 每次請求創建時,如果集合中已有則直接返回;若沒有則創建,放入集合並返回


參考資料:

《設計模式之禪》        秦小波著

《JAVA設計模式》        來自網絡
發佈了32 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章