日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++设计模式之简单工厂模式

發(fā)布時間:2025/7/14 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++设计模式之简单工厂模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模擬場景

要求使用簡單工廠模式設(shè)計一個可以創(chuàng)建不同幾何形狀(如矩形、圓形、三角形)的繪圖工具,每個幾何圖形都具有繪制Draw()和擦除Erase()兩個方法;

UML類圖

分析需求:

首先這個繪圖工具要求可以提供一系列的幾何圖形繪制,包括矩形、圓形、橢圓形、三角形,這些圖形對象要求都具備繪制Draw()和Erase()方法;因此,我們可以定義一個抽象基類CGraph,具有Draw()和Erase()的純虛方法;因?yàn)椴煌膱D形類型,它們的Draw()和Erase()具體實(shí)現(xiàn)和需要的參數(shù)是不同的,這里以實(shí)現(xiàn)三角形和正方形為例進(jìn)行說明。

CTriangle類描述三角形類信息,CSquare類描述正方形類信息,CGraphFactory類負(fù)責(zé)創(chuàng)建不同的幾何對象,它由GreateGraph函數(shù)根據(jù)不同的參數(shù),選擇性的實(shí)例化幾何對象。通過CGraphFactory類工廠用戶可以不關(guān)心具體對象是如何創(chuàng)建的,只需要告訴類工廠,需要創(chuàng)建什么類型的幾何圖形即可,UML類圖如下。

下面給出簡單工廠的定義:

簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據(jù)參數(shù)的不同返回不同類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類;因?yàn)閯?chuàng)建實(shí)例的類方式是靜態(tài)方法,又被稱為靜態(tài)工廠方法(Static Factory Method)模式,它屬于類創(chuàng)建型模式。

具體代碼

主體代碼

#include "stdafx.h" using namespace std; typedef enum {EN_DRAW_SQUARE = 0,EN_DRAW_TRIANGLE, }ENUM_DRAW_TYPE;#define SAFE_DELETE_PTR(p) if ((p) != NULL)\ { \delete p;\p = NULL;\ } //圖形基類 class CGraph { public:CGraph(){}virtual ~CGraph(){} public:virtual void Draw() = 0;virtual void Erase() = 0; }; //正方形 class CSquare:public CGraph { public:CSquare():m_width(10){ cout << "完成正方形對象創(chuàng)建" << endl;}~CSquare(){} public:virtual void Draw(){cout << "繪制正方形" << endl;}virtual void Erase(){cout << "清除繪正方形" << endl;} private:int m_width;//正方形的獨(dú)有參數(shù) };//三角形 class CTriangle:public CGraph { public:CTriangle():m_bottom(10),m_high(12){cout << "完成三角形對象創(chuàng)建" << endl;}~CTriangle(){} public:virtual void Draw(){cout << "繪制三角形" <<endl;}virtual void Erase(){cout << "清除三角形" << endl;}private:int m_bottom; //底int m_high; //高 };//圖形創(chuàng)建工廠 class CGraphFactory { public://根據(jù)參數(shù)創(chuàng)建不同的對象static CGraph * CreateGraph(ENUM_DRAW_TYPE type){CGraph * pGraph = NULL;switch(type){case EN_DRAW_SQUARE:{pGraph = new CSquare();break;}case EN_DRAW_TRIANGLE:{pGraph = new CTriangle();break;}default:break;}return pGraph;} };

客戶端代碼

//簡單工廠方法CGraph *pGraph = NULL;cout <<"請求創(chuàng)建三角形:"<< endl;pGraph = CGraphFactory::CreateGraph(EN_DRAW_TRIANGLE);if (pGraph != NULL){pGraph->Draw();pGraph->Erase();SAFE_DELETE_PTR(pGraph);}cout << endl <<"請求創(chuàng)建正方形:"<< endl;pGraph = CGraphFactory::CreateGraph(EN_DRAW_SQUARE);if (pGraph != NULL){pGraph->Draw();pGraph->Erase();SAFE_DELETE_PTR(pGraph);}

運(yùn)行結(jié)果

簡單工廠模式總結(jié)

優(yōu)點(diǎn):

通過工廠類用戶不需要關(guān)心類對象的具體創(chuàng)建過程,使得對象的創(chuàng)建和使用分離,屏蔽了對象創(chuàng)建和初始化過程,方面用戶使用;

不足:

主要的不足從以下方面展開:
1. 工廠類負(fù)責(zé)一系列對象的創(chuàng)建,工廠類職責(zé)不單一;若處理不當(dāng),影響面比較大。
2. 如果每個類創(chuàng)建過程中需要涉及復(fù)雜的初始化和相關(guān)準(zhǔn)備,會造成工廠類邏輯復(fù)雜,不利于擴(kuò)展和維護(hù)。
3. 若需要新增其他對象創(chuàng)建,需要修改靜態(tài)函數(shù)的分支判斷,違背了“開放擴(kuò)展,關(guān)閉修改”的原則。

適用場合:

  • 工廠類負(fù)責(zé)創(chuàng)建的對象比較少,由于創(chuàng)建的對象較少,不會造成工廠方法中的業(yè)務(wù)邏輯太過復(fù)雜。
  • 客戶端只知道傳入工廠類的參數(shù),對于如何創(chuàng)建對象并不關(guān)心。
  • 參考資料:
    http://blog.csdn.net/LoveLion/article/details/9300731

    轉(zhuǎn)載于:https://www.cnblogs.com/jinxiang1224/p/8468220.html

    總結(jié)

    以上是生活随笔為你收集整理的c++设计模式之简单工厂模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。