2 典型實現
3 例項
4 隱藏
5 主要優點
6 主要缺點
7 適用場景
8 總結
儘管簡單工廠模式實現了物件的建立和使用分離,但是仍然存在以下兩個問題:
乙個更好的辦法是使用工廠方法模式。
工廠方法模式:定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。
工廠方法又簡稱工廠模式或虛擬構造器模式或多型工廠模式,讓乙個類的例項化延遲到其子類,是一種類建立型模式。
這裡定義為介面:
inte***ce
product
兩個示例具體產品:
class
concreteproducta
implements
product
}class
concreteproductb
implements
product
}
這裡定義為介面:
inte***ce
factory
抽象工廠中宣告了工廠方法但沒有實現,交由子類具體工廠負責。
class
concretefactorya
implements
factory
}class
concretefactoryb
implements
factory
}
乙個具體產品對應乙個具體工廠,每乙個具體工廠返回不同的具體產品。
客戶端針對抽象產品以及抽象工廠進行程式設計,無需知道具體產品的類名,只需要知道具體產品對應的工廠,即可獲取具體產品:
factory factory =
newconcretefactorya()
;product product = factory.
get();
product.
method()
;factory =
newconcretefactoryb()
;product = factory.
get();
product.
method()
;
日誌記錄器的設計:該記錄器可以通過多種途徑儲存系統的執行日誌,例如檔案記錄或者資料庫記錄,使用工廠方法模式進行設計。設計如下:
**如下:
public
class
test
}//抽象產品
inte***ce
logger
//具體產品:databaselogger
class
databaselogger
implements
logger
}//具體產品:filelogger
class
filelogger
implements
logger
}//抽象工廠
inte***ce
logge***ctory
//具體工廠:databaselogge***ctory
class
databaselogge***ctory
implements
logge***ctory
}//具體工廠:filelogge***ctory
class
filelogge***ctory
implements
logge***ctory
}
可以把抽象工廠設定為抽象類,工廠方法直接可以對客戶端隱藏,也就是說可以直接通過抽象工廠呼叫具體產品類的業務方法,客戶端無需建立具體產品,直接通過工廠類呼叫即可,**修改如下(抽象產品以及具體產品類不用修改):
//抽象工廠
abstract
class
logge***ctory
public
abstract logger createlogger()
;}//具體工廠:databaselogge***ctory
class
databaselogge***ctory
extends
logge***ctory
}//具體工廠:filelogge***ctory
五 工廠方法模式 設計模式學習筆記
1 抽象工廠角色 是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。2 具體工廠角色 這是實現抽象工廠介面的具體工廠類,包含於應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。3 抽象產品角色 工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或...
C 設計模式學習筆記五 工廠方法模式
工廠方法模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。工廠方法模式在專案中使用得非常頻繁,以至於很多 中都包含工廠方法模式。該模式幾乎盡人皆知,但不是每個人都能用得好。熟能生巧,熟練掌握該模式,多思考工廠方法如何應用,而且工廠方法模式還可以與其他模...
設計模式(五) 工廠方法模式
工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。我們依舊以之前的電腦程式來闡述工廠方法模式 不了解簡單工廠的童鞋戳這裡 1.如下 using system namespace factorymethod set public double n...