AbstractFactory(抽象工廠)

字號(hào):

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ù)。