模式定義
工廠方法模式(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,根據客戶端傳來的標識決定呼叫哪個...