国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【設計模式】Head First 設計模式——工廠方法模式 C++實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【設計模式】Head First 設計模式——工廠方法模式 C++實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

設計模式最大的作用就是在變化和穩(wěn)定中間尋找隔離點,然后分離它們,從而管理變化。將變化像小兔子一樣關到籠子里,讓它在籠子里隨便跳,而不至于跳出來把你整個房間給污染掉。

設計思想

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

動機

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

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

Factory Method模式用于隔離類對象的使用者和具體類型之間的耦合關系。面對一個經常變化的具體類型,緊耦合關系會導致軟件的脆弱。

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

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

業(yè)務場景

在 MainForm 中需要對文件進行分解操作,但是分解的文件可能是二進制文件,文本文件,圖片文件等等,這時候我們需要在 MainForm 創(chuàng)建對應的對象,然后調用分解函數。

一個非常直觀的思路是:

class ISplitter {
public:
    virtual void split() = 0;
    virtual ~ISplitter() {
    }
};

class BinarySplitter : public ISplitter {
//實現(xiàn)分解二進制文件
};

class TxtSplitter : public ISplitter {
//實現(xiàn)分解TXT文件
};

class PictureSplitter : public ISplitter {
//實現(xiàn)分解圖片文件
};

class VideoSplitter : public ISplitter {
 //實現(xiàn)分解視頻文件   
};

class MainForm : public Form {
public:
    void Button1_Click() {
        ISplitter* splitter = new BinarySplitter();  
        splitter->split();
    }
};

這是很自然的一種寫法,問題的關鍵在于這一句代碼:

ISplitter* splitter = new BinarySplitter();  

在等號的左邊,是一個抽象類,屬于抽象依賴(編譯時依賴),但是等號的右邊,是一個具體類,屬于細節(jié)依賴。根據依賴倒置原則,抽象不應該依賴于細節(jié),而這種寫法很明顯違背了這種原則。

下面看看使用工廠模式應該怎么去實現(xiàn):

代碼案例

編寫專門的工廠類,再編寫具體的工廠子類。在具體操作的 MainForm 中通過構造把子類對象傳入。用多態(tài)的方式,避免了 MainForm 中的固定。文章來源地址http://www.zghlxwxcb.cn/news/detail-687580.html

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

// 工廠基類
class SplitterFactory {
public:
    // 虛函數,延遲到運行時依賴
    virtual ISplitter* CreateSplitter() = 0;
    virtual ~SplitterFactory() {
    }
};//創(chuàng)建一個工廠類,專門負責對象的實例化

// 具體類
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();
    }
};

// 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();
    }
};

到了這里,關于【設計模式】Head First 設計模式——工廠方法模式 C++實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【設計模式】Head First 設計模式——觀察者模式 C++實現(xiàn)

    設計模式最大的作用就是在變化和穩(wěn)定中間尋找隔離點,然后分離它們,從而管理變化。將變化像小兔子一樣關到籠子里,讓它在籠子里隨便跳,而不至于跳出來把你整個房間給污染掉。 主題對象(出版者)管理某些數據,當主題內的數據改變,就會通知觀察者(訂閱者)。

    2024年02月10日
    瀏覽(27)
  • 【Head First 設計模式】-- 觀察者模式

    【Head First 設計模式】-- 觀察者模式

    客戶有一個WeatherData對象,負責追蹤溫度、濕度和氣壓等數據?,F(xiàn)在客戶給我們提了個需求,讓我們利用WeatherData對象取得數據,并更新三個布告板:目前狀況、氣象統(tǒng)計和天氣預報。 WeatherData對象提供了4個接口: getTemperature():獲取溫度 getHumidity():獲取濕度 getPressure():獲

    2024年02月05日
    瀏覽(16)
  • [設計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 多態(tài)工廠的實現(xiàn)——工廠方法模式

    [設計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 多態(tài)工廠的實現(xiàn)——工廠方法模式

    前言: 為什么之前寫過Golang 版的設計模式,還在重新寫 Java 版? 答:因為對于我而言,當然也希望對正在學習的大伙有幫助。Java作為一門純面向對象的語言,更適合用于學習設計模式。 為什么類圖要附上uml 因為很多人學習有做筆記的習慣,如果單純的只是放一張圖片,那

    2024年01月21日
    瀏覽(23)
  • 【C++設計模式】用簡單工廠模式實現(xiàn)按汽車重量輸出汽車類型

    【C++設計模式】用簡單工廠模式實現(xiàn)按汽車重量輸出汽車類型

    2023年8月24日,周四凌晨 ?

    2024年02月11日
    瀏覽(30)
  • C++設計模式(工廠模式)

    C++設計模式(工廠模式)

    本篇文章正式帶大家來學習C++中的設計模式,這篇文章主要帶大家學習工廠模式。 工廠模式(Factory Pattern)是一種創(chuàng)建型設計模式,它提供了一種創(chuàng)建對象的接口,但將具體對象的實例化延遲到子類或具體工廠類中。工廠模式通過解耦客戶端代碼和創(chuàng)建具體對象的過程,使客

    2024年02月11日
    瀏覽(23)
  • 設計模式(二)、工廠模式--工廠方法模式

    工廠方法模式是一種常用的創(chuàng)建型設計模式。它解決了簡單工廠模式的問題:如違反了開閉原則,其次可以用于更復雜的結構 它的核心結構有四個角色? 抽象工廠;具體工廠;抽象產品;具體產品 抽象工廠(抽象類或接口)不在負責具體的創(chuàng)建過程,即具體的代碼實現(xiàn)。只制定

    2024年02月16日
    瀏覽(21)
  • 【設計模式】單例模式、工廠方法模式、抽象工廠模式

    1. 單例模式 (Singleton Pattern): 場景: 在一個應用程序中,需要一個全局唯一的配置管理器,確保配置信息只有一個實例。 2. 工廠方法模式 (Factory Method Pattern): 場景: 創(chuàng)建一組具有相似功能但具體實現(xiàn)不同的日志記錄器。 3. 抽象工廠模式 (Abstract Factory Pattern): 場景: 創(chuàng)建不同

    2024年01月15日
    瀏覽(29)
  • 【13】c++設計模式——>簡單工廠模式

    c++中的工廠模式是一種創(chuàng)建型設計模式,它提供一種創(chuàng)建對象的接口,但具體創(chuàng)建的對象類型可以在運行時決定,這樣可以將對象的創(chuàng)建與使用代碼分離,提高代碼的靈活性和可維護性。 在c++中實現(xiàn)工廠模式,通常會定義一個工廠類,該類負責創(chuàng)建對象。工廠類通常具有一個

    2024年02月07日
    瀏覽(17)
  • 【設計模式專題之工廠方法模式】2.積木工廠

    時間限制:1.000S??空間限制:256MB 題目描述 小明家有兩個工廠,一個用于生產圓形積木,一個用于生產方形積木,請你幫他設計一個積木工廠系統(tǒng),記錄積木生產的信息。 輸入描述 輸入的第一行是一個整數 N(1 ≤ N ≤ 100),表示生產的次數。? 接下來的 N 行,每行輸入一

    2024年03月14日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包