設計模式讀書筆記(七) 工廠方法模式

2021-08-26 03:04:58 字數 2464 閱讀 3786

模式定義

工廠方法模式(factory method pattern):又名工廠模式,虛擬構造器(virtual constructor)模式、多型工廠模式(polymorphic factory)模式,它屬於類建立型。在該模式中工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體產品物件。這樣可通過共產子類來確定究竟應該例項化哪乙個具體產品類。

模式結構

1、product(抽象產品)

抽象產品是定義產品的介面,是工廠方法模式所建立物件的超型別,即產品物件的共同父類或介面。

2、concreteproduct(具體產品)

具體產品實現了抽象產品介面,某種型別的具體產品有專門的具體工廠建立,它們之間一一對應。

3、factory(抽象工廠)

在其中宣告了工廠方法,用於返回乙個產品,它是工廠方法模式的核心,任何在模式中建立物件的工廠類都必須實現該介面。

4、concretefactory(具體工廠)

是抽象工廠的子類,實現了抽象工廠中定義的工廠方法,並可由客戶呼叫,返回乙個具體產品類的例項。

模式的優缺點

優點增加新的產品類時無需修改現有系統,並封裝了產品物件的建立細節,系統具有良好的靈活性和可擴充套件性,符合「開閉原則」

缺點增加新的產品的同時需要增加新的工廠,導致系統類的規格書成對增加,在一定程度上增加了系統的複雜性。

模式的適用情況

乙個類不知道它所需要的物件的類;另乙個類通過其子類來指定建立哪個物件;將建立物件的任務委託給多個工廠子類中的某乙個.客戶端在使用時可以無需關心是哪乙個工廠子類建立產品子類,需要時再動態指定。

某系統日誌記錄器要求支援多種日誌記錄方式,如檔案記錄、資料庫記錄等,且使用者可以根據要求動態選擇日誌,現使用工廠方法模式設計該系統。

思維構圖

**及執行結果

1、主要**

1)抽象產品類log(日誌類)可以是乙個介面,也可以是乙個抽象類,其中包含了所有產品都具有的業務方法

public

inte***ce log

2)具體產品類filelog(檔案日誌類),是一種具體產品,實現了在log介面中定義的業務方法writelog()

public

class

filelog

implements

log

}

3)具體產品類databaselog(資料庫日誌類)

public

class

databaselog

implements

log

}

4)抽象工廠類logfactory(日誌工廠類),包含了抽象工廠方法createlog(),返回乙個抽象產品log型別的物件。

public

inte***ce logfactory

5)具體工廠類filelogfactory(檔案日誌工廠類),實現抽象方法createlog(),在工廠方法中建立並返回乙個物件的具體產品。

public

class

filelogfactory

implements

logfactory

}

6)具體工廠類databaselogfactory

public

class

databaselogfactory

implements

logfactory

}

2、輔助**

1)xml操作工具類xmlutil

public

class xmlutil catch (exception e) }}

2)配置檔案config.xml

<?xml version="1.0" encoding="utf-8"?>

one.filelogfactoryclassname>

config>

3)客戶端測試類client

public

class client catch (exception e) }}

3、執行結果

讀書筆記 《大話設計模式》工廠方法模式

工廠方法模式,又稱工廠模式 多型工廠模式和虛擬構造器模式,通過定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件。工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。下圖為計算器程式的工廠方法模式的uml圖結構 下面為計算器程式的...

大話設計模式讀書筆記 5 工廠方法模式

生活中的例子 車有很多的品牌,寶馬,賓士等,製造汽車的工廠就是抽象出來的工廠,而製造寶馬汽車的工廠 就是具體的產品工廠,這就是工廠方法的應用場景工廠方法模式 定義乙個建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延伸到了子類 creator 抽象工廠,宣告工廠方法 concret...

讀書筆記6 工廠方法模式

1 概念 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法是乙個類的例項化延伸到子類。2 背景 已經知道工廠模式,有乙個父類superclass,以及這個父類的不同實現方法和演算法的若干個子類classa,classb.有乙個工廠類daofactory,根據客戶端傳來的標識決定呼叫哪個...