(GeekBand)C++設(shè)計模式 第二周學(xué)習(xí)筆記

Factory Method模式

“對象創(chuàng)建”模式

通過“對象創(chuàng)建”模式繞開new,來避免對象創(chuàng)建(new)過程中所導(dǎo)致的緊耦合(依賴具體類),從而支持對象創(chuàng)建的穩(wěn)定。它是接口抽象之后的第一步工作。

動機

在軟件系統(tǒng)中,經(jīng)常面臨著創(chuàng)建對象的工作;由于需求的變化,需要創(chuàng)建的對象的具體類型經(jīng)常變化。

如何應(yīng)對這種變化?如何繞過常規(guī)的對象創(chuàng)建方法(new),提供一種“封裝機制”來避免客戶程序和這種“具體對象創(chuàng)建工作”的緊耦合?

模式定義

定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。Factory Method使得一個類的實例化延遲(目的:解耦,手段:虛函數(shù))到子類。--《設(shè)計模式》GoF

使用實例

//ISplitterFactory.cpp


//抽象類
class ISplitter{
public:
    virtual void split()=0;
    virtual ~ISplitter(){}
};


//工廠基類
class SplitterFactory{
public:
    virtual ISplitter* CreateSplitter()=0;
    virtual ~SplitterFactory(){}
};


//MainForm

class MainForm : public Form
{
    SplitterFactory*  factory;//工廠

public:
    
    MainForm(SplitterFactory*  factory){
        this->factory=factory;
    }
    
    void Button1_Click(){

        
        ISplitter * splitter=
            factory->CreateSplitter(); //多態(tài)new
        
        splitter->split();

    }
};

//FileSplitter



//具體類
class BinarySplitter : public ISplitter{
    
};

class TxtSplitter: public ISplitter{
    
};

class PictureSplitter: public ISplitter{
    
};

class VideoSplitter: public ISplitter{
    
};

//具體工廠
class BinarySplitterFactory: public SplitterFactory{
public:
    virtual ISplitter* CreateSplitter(){
        return new BinarySplitter();
    }
};

class TxtSplitterFactory: public SplitterFactory{
public:
    virtual ISplitter* CreateSplitter(){
        return new TxtSplitter();
    }
};

class PictureSplitterFactory: public SplitterFactory{
public:
    virtual ISplitter* CreateSplitter(){
        return new PictureSplitter();
    }
};

class VideoSplitterFactory: public SplitterFactory{
public:
    virtual ISplitter* CreateSplitter(){
        return new VideoSplitter();
    }
};


要點總結(jié)

Factory Method模式用于隔離類對象的使用者和具體類型之間的耦合關(guān)系。面對一個經(jīng)常變化的具體類型,緊耦合關(guān)系(new)會導(dǎo)致軟件的脆弱。

Factory Method模式通過面向?qū)ο蟮氖址?,將所要?chuàng)建的具體對象工作延遲到子類,從而實現(xiàn)了一種擴展(而非更改)的策略,較好的解決了這種緊耦合關(guān)系。

Factory Method模式解決“單個對象”的需求變化。缺點在于要求創(chuàng)建方法/參數(shù)相同。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容