ABSTRACT FACTORY)(抽象工廠)——對(duì)象創(chuàng)建型模式提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴的接口,而無需指定它們具體的類
參與者:
l AbstractFactory
聲明一個(gè)創(chuàng)建抽象產(chǎn)品對(duì)象的操作接口
l ConcreteFactory
實(shí)現(xiàn)創(chuàng)建具體產(chǎn)品對(duì)象的操作,一個(gè)ConcreteFactory實(shí)例對(duì)應(yīng)同一系列產(chǎn)品的創(chuàng)建
l AbstractProduct
為一類產(chǎn)品對(duì)象聲明一個(gè)接口
l ConcreteProduct
定義一個(gè)將被相應(yīng)的具體工廠創(chuàng)建的產(chǎn)品對(duì)象,實(shí)現(xiàn)AbstractProduct接口
l Client
僅使用由AbstractFactory和AbstractProduct類聲明的接口。
效果:
1) 分離了具體的類
一個(gè)工廠封裝創(chuàng)建產(chǎn)品對(duì)象的責(zé)任和過程,它將可以與類的實(shí)現(xiàn)分離??蛻敉ㄟ^抽象接口操縱實(shí)例。
2) 使得易于交換產(chǎn)品系列
一個(gè)具體工廠類在一個(gè)應(yīng)用中僅出現(xiàn)一次(初始化時(shí)),當(dāng)需要改變產(chǎn)品系列時(shí)代碼改動(dòng)量很少。
3) 有利于產(chǎn)品的一致性
一個(gè)應(yīng)用一次只能使用同一個(gè)系列中的的產(chǎn)品,AbstractFactory很容易實(shí)現(xiàn)。
4) 缺點(diǎn):難以擴(kuò)展抽象工廠以生產(chǎn)新種類的產(chǎn)品。每一種產(chǎn)品對(duì)應(yīng)與工廠的一個(gè)接口,增加新種類的產(chǎn)品就需要擴(kuò)展工廠接口,這將涉及AbstractFactory類及其所有子類的改變。
實(shí)現(xiàn):
1) 將工廠作為單件。一個(gè)應(yīng)用中一般每個(gè)產(chǎn)品系列只需一個(gè)ConcreteFactory實(shí)例,可以運(yùn)用Singleton模式。
2) AbstractFactory僅聲明一個(gè)創(chuàng)建產(chǎn)品的接口,真正創(chuàng)建產(chǎn)品是由ConcreteProduct子類實(shí)現(xiàn)的。最通常的一個(gè)辦法是為每一個(gè)產(chǎn)品定義一個(gè)工廠方法(Factory Method)
3)定義可擴(kuò)展工廠,AbstractFactory通常為每一種它可以生產(chǎn)的產(chǎn)品定義一個(gè)操作,增加新的產(chǎn)品不方便。一種靈活但不安全的設(shè)計(jì)是給創(chuàng)建對(duì)象的操作增加一個(gè)參數(shù)。那么AbstractFactory只需要一個(gè)Make操作和一個(gè)指示要?jiǎng)?chuàng)建對(duì)象的種類的參數(shù)。
參與者:
l AbstractFactory
聲明一個(gè)創(chuàng)建抽象產(chǎn)品對(duì)象的操作接口
l ConcreteFactory
實(shí)現(xiàn)創(chuàng)建具體產(chǎn)品對(duì)象的操作,一個(gè)ConcreteFactory實(shí)例對(duì)應(yīng)同一系列產(chǎn)品的創(chuàng)建
l AbstractProduct
為一類產(chǎn)品對(duì)象聲明一個(gè)接口
l ConcreteProduct
定義一個(gè)將被相應(yīng)的具體工廠創(chuàng)建的產(chǎn)品對(duì)象,實(shí)現(xiàn)AbstractProduct接口
l Client
僅使用由AbstractFactory和AbstractProduct類聲明的接口。
效果:
1) 分離了具體的類
一個(gè)工廠封裝創(chuàng)建產(chǎn)品對(duì)象的責(zé)任和過程,它將可以與類的實(shí)現(xiàn)分離??蛻敉ㄟ^抽象接口操縱實(shí)例。
2) 使得易于交換產(chǎn)品系列
一個(gè)具體工廠類在一個(gè)應(yīng)用中僅出現(xiàn)一次(初始化時(shí)),當(dāng)需要改變產(chǎn)品系列時(shí)代碼改動(dòng)量很少。
3) 有利于產(chǎn)品的一致性
一個(gè)應(yīng)用一次只能使用同一個(gè)系列中的的產(chǎn)品,AbstractFactory很容易實(shí)現(xiàn)。
4) 缺點(diǎn):難以擴(kuò)展抽象工廠以生產(chǎn)新種類的產(chǎn)品。每一種產(chǎn)品對(duì)應(yīng)與工廠的一個(gè)接口,增加新種類的產(chǎn)品就需要擴(kuò)展工廠接口,這將涉及AbstractFactory類及其所有子類的改變。
實(shí)現(xiàn):
1) 將工廠作為單件。一個(gè)應(yīng)用中一般每個(gè)產(chǎn)品系列只需一個(gè)ConcreteFactory實(shí)例,可以運(yùn)用Singleton模式。
2) AbstractFactory僅聲明一個(gè)創(chuàng)建產(chǎn)品的接口,真正創(chuàng)建產(chǎn)品是由ConcreteProduct子類實(shí)現(xiàn)的。最通常的一個(gè)辦法是為每一個(gè)產(chǎn)品定義一個(gè)工廠方法(Factory Method)
3)定義可擴(kuò)展工廠,AbstractFactory通常為每一種它可以生產(chǎn)的產(chǎn)品定義一個(gè)操作,增加新的產(chǎn)品不方便。一種靈活但不安全的設(shè)計(jì)是給創(chuàng)建對(duì)象的操作增加一個(gè)參數(shù)。那么AbstractFactory只需要一個(gè)Make操作和一個(gè)指示要?jiǎng)?chuàng)建對(duì)象的種類的參數(shù)。